vaderjs 1.6.0 → 1.6.2
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/README.MD +2 -2
- package/README.md +1 -1
- package/bundler/index.js +4 -5
- package/index.ts +57 -11
- package/main.js +12 -10
- package/package.json +6 -1
package/README.MD
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
<a href="https://vader-js.pages.dev">
|
|
3
3
|
<picture>
|
|
4
4
|
<source media="(prefers-color-scheme: dark)" srcset="/icon.jpeg">
|
|
5
|
-
<img src="
|
|
5
|
+
<img src="https://github.com/Postr-Inc/Vader.js/blob/main/logo.png" height="128">
|
|
6
6
|
</picture>
|
|
7
7
|
<h1 align="center">Vader.js</h1>
|
|
8
8
|
</a>
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
# Installation
|
|
17
17
|
|
|
18
18
|
```js
|
|
19
|
-
|
|
19
|
+
bun install vaderjs @latest
|
|
20
20
|
```
|
|
21
21
|
|
|
22
22
|
|
package/README.md
CHANGED
package/bundler/index.js
CHANGED
|
@@ -37,11 +37,10 @@ await Bun.build({
|
|
|
37
37
|
entrypoints: [process.env.ENTRYPOINT],
|
|
38
38
|
minify: false,
|
|
39
39
|
root: process.cwd() + "/dist/",
|
|
40
|
-
outdir: process.cwd() + "/dist/",
|
|
41
|
-
|
|
40
|
+
outdir: process.cwd() + "/dist/",
|
|
42
41
|
format: "esm",
|
|
43
42
|
...(process.env.DEV ? { sourcemap: "inline" } : {}),
|
|
44
|
-
external:['*.jsx', '*.js', '*.ts']
|
|
43
|
+
external:['*.jsx', '*.js', '*.ts', '*.tsx']
|
|
45
44
|
});
|
|
46
45
|
|
|
47
46
|
let builtCode = fs.readFileSync(path.join(process.cwd(), 'dist', process.env.filePath), 'utf-8')
|
|
@@ -54,8 +53,8 @@ function handleReplacements(code) {
|
|
|
54
53
|
try {
|
|
55
54
|
let url = line.includes("'") ? line.split("'")[1] : line.split('"')[1]
|
|
56
55
|
|
|
57
|
-
line = line.replace(url, url.replace('.jsx', '.js'))
|
|
58
|
-
line = line.replace(url, url.replace('.ts', '.js'))
|
|
56
|
+
line = line.replace(url, url.replace('.jsx', '.js').replace('.tsx', '.js'))
|
|
57
|
+
line = line.replace(url, url.replace('.ts', '.js').replace('.tsx', '.js'))
|
|
59
58
|
newLines.push(line)
|
|
60
59
|
} catch (error) {
|
|
61
60
|
continue;
|
package/index.ts
CHANGED
|
@@ -193,6 +193,7 @@ export class Component {
|
|
|
193
193
|
Mounted;
|
|
194
194
|
effect;
|
|
195
195
|
key;
|
|
196
|
+
effectCalls: any[]
|
|
196
197
|
prevState;
|
|
197
198
|
constructor() {
|
|
198
199
|
this.key = crypto.randomUUID();
|
|
@@ -201,20 +202,66 @@ export class Component {
|
|
|
201
202
|
this.effect = [];
|
|
202
203
|
this.Mounted = false;
|
|
203
204
|
this.element = null;
|
|
205
|
+
this.effectCalls = []
|
|
206
|
+
this.errorThreshold = 1000
|
|
207
|
+
this.maxIntervalCalls = 10
|
|
204
208
|
}
|
|
205
209
|
useEffect(callback, dependencies) {
|
|
210
|
+
const callbackId = callback.toString();
|
|
211
|
+
|
|
212
|
+
if (!this.effectCalls.some(s => s.id === callbackId)) {
|
|
213
|
+
this.effectCalls.push({ id: callbackId, count: 0, lastCall: Date.now() });
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
const effectCall = this.effectCalls.find(s => s.id === callbackId);
|
|
217
|
+
|
|
218
|
+
const executeCallback = () => {
|
|
219
|
+
const now = Date.now();
|
|
220
|
+
const timeSinceLastCall = now - effectCall.lastCall;
|
|
221
|
+
|
|
222
|
+
if (timeSinceLastCall < this.errorThreshold) {
|
|
223
|
+
effectCall.count += 1;
|
|
224
|
+
if (effectCall.count > this.maxIntervalCalls) {
|
|
225
|
+
throw new Error(`Woah wayy too many calls, ensure you are not overlooping you can change the maxThresholdCalls and errorThreshold depending on needs`)
|
|
226
|
+
}
|
|
227
|
+
} else {
|
|
228
|
+
effectCall.count = 1;
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
effectCall.lastCall = now;
|
|
232
|
+
|
|
233
|
+
setTimeout(() => {
|
|
234
|
+
try {
|
|
235
|
+
callback();
|
|
236
|
+
} catch (error) {
|
|
237
|
+
console.error(error);
|
|
238
|
+
}
|
|
239
|
+
}, 0);
|
|
240
|
+
};
|
|
241
|
+
|
|
206
242
|
if (dependencies.length === 0 && this.Mounted && this.effect.length === 0) {
|
|
207
|
-
|
|
208
|
-
|
|
243
|
+
executeCallback();
|
|
244
|
+
this.effect.push(callbackId);
|
|
209
245
|
} else {
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
246
|
+
// Check if dependencies have changed
|
|
247
|
+
let dependenciesChanged = false;
|
|
248
|
+
if (dependencies.length !== this.effect.length) {
|
|
249
|
+
dependenciesChanged = true;
|
|
250
|
+
} else {
|
|
251
|
+
for (let i = 0; i < dependencies.length; i++) {
|
|
252
|
+
if (this.effect[i] !== dependencies[i]) {
|
|
253
|
+
dependenciesChanged = true;
|
|
254
|
+
break;
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
if (dependenciesChanged) {
|
|
260
|
+
this.effect = [...dependencies];
|
|
261
|
+
executeCallback();
|
|
214
262
|
}
|
|
215
|
-
}
|
|
216
263
|
}
|
|
217
|
-
|
|
264
|
+
}
|
|
218
265
|
useState(key, defaultValue, persist = false) {
|
|
219
266
|
if (typeof window === "undefined")
|
|
220
267
|
return [defaultValue, () => {
|
|
@@ -233,8 +280,7 @@ export class Component {
|
|
|
233
280
|
!persist && sessionStorage.removeItem("state_" + key);
|
|
234
281
|
});
|
|
235
282
|
}
|
|
236
|
-
const setValue = (newValue) => {
|
|
237
|
-
console.log("setting value", newValue);
|
|
283
|
+
const setValue = (newValue) => {
|
|
238
284
|
sessionStorage.setItem("state_" + key, JSON.stringify({ value: newValue }));
|
|
239
285
|
this.forceUpdate(this.key);
|
|
240
286
|
};
|
|
@@ -274,7 +320,7 @@ export class Component {
|
|
|
274
320
|
}
|
|
275
321
|
Reconciler = {
|
|
276
322
|
update: (oldElement, newElement) => {
|
|
277
|
-
|
|
323
|
+
if(!oldElement || !newElement) return;
|
|
278
324
|
if (this.Reconciler.shouldUpdate(oldElement, newElement)) {
|
|
279
325
|
let part = this.Reconciler.shouldUpdate(oldElement, newElement, true);
|
|
280
326
|
if (part === true) {
|
package/main.js
CHANGED
|
@@ -17,8 +17,7 @@ if (!fs.existsSync(process.cwd() + '/src')) {
|
|
|
17
17
|
}
|
|
18
18
|
if (!fs.existsSync(process.cwd() + '/vader.config.ts')) {
|
|
19
19
|
fs.writeFileSync(process.cwd() + '/vader.config.ts',
|
|
20
|
-
`
|
|
21
|
-
import defineConfig from 'vaderjs/config'
|
|
20
|
+
`import defineConfig from 'vaderjs/config'
|
|
22
21
|
export default defineConfig({
|
|
23
22
|
port: 8080,
|
|
24
23
|
host_provider: 'apache'
|
|
@@ -162,7 +161,7 @@ async function generateApp() {
|
|
|
162
161
|
code = handleReplacements(code)
|
|
163
162
|
let size = code.length / 1024
|
|
164
163
|
r = r.replace(process.cwd().replace(/\\/g, '/') + '/app', '')
|
|
165
|
-
r = r.replace('.jsx', '.js')
|
|
164
|
+
r = r.replace('.jsx', '.js').replace('.tsx', '.js')
|
|
166
165
|
fs.mkdirSync(path.dirname(process.cwd() + '/dist/' + r), { recursive: true })
|
|
167
166
|
fs.writeFileSync(process.cwd() + '/dist/' + path.dirname(r) + '/' + path.basename(r), `
|
|
168
167
|
let route = window.location.pathname.split('/').filter(v => v !== '')
|
|
@@ -198,7 +197,7 @@ async function generateApp() {
|
|
|
198
197
|
size,
|
|
199
198
|
bindes: bindes.join('\n'),
|
|
200
199
|
filePath: r,
|
|
201
|
-
INPUT: `../app/${r.replace('.js', '.jsx')}`,
|
|
200
|
+
INPUT: `../app/${r.replace('.js', '.jsx').replace('.tsx', '.js')}`,
|
|
202
201
|
},
|
|
203
202
|
onExit({ exitCode: code }) {
|
|
204
203
|
if (code === 0) {
|
|
@@ -239,6 +238,9 @@ async function generateApp() {
|
|
|
239
238
|
|
|
240
239
|
fs.writeFileSync(process.cwd() + '/vercel.json', JSON.stringify(vercelData, null, 4))
|
|
241
240
|
break;
|
|
241
|
+
case 'apache':
|
|
242
|
+
let data = ''
|
|
243
|
+
|
|
242
244
|
}
|
|
243
245
|
|
|
244
246
|
})
|
|
@@ -263,25 +265,25 @@ function handleFiles() {
|
|
|
263
265
|
var file = i
|
|
264
266
|
fs.mkdirSync(path.join(process.cwd() + '/dist', path.dirname(file)), { recursive: true })
|
|
265
267
|
// turn jsx to js
|
|
266
|
-
if (file.includes('.jsx')) {
|
|
268
|
+
if (file.includes('.jsx') || file.includes('.tsx')) {
|
|
267
269
|
let code = await Bun.file(file).text()
|
|
268
270
|
code = handleReplacements(code)
|
|
269
271
|
|
|
270
|
-
file = file.replace('.jsx', '.js')
|
|
271
|
-
fs.writeFileSync(path.join(process.cwd() + '/dist', file.replace('.jsx', '.js')), code)
|
|
272
|
+
file = file.replace('.jsx', '.js').replace('.tsx', '.js')
|
|
273
|
+
fs.writeFileSync(path.join(process.cwd() + '/dist', file.replace('.jsx', '.js').replace('.tsx', '.js')), code)
|
|
272
274
|
await Bun.spawn({
|
|
273
275
|
cmd: ['bun', 'run', './dev/bundler.js'],
|
|
274
276
|
cwd: process.cwd(),
|
|
275
277
|
stdout: 'inherit',
|
|
276
278
|
env: {
|
|
277
|
-
ENTRYPOINT: path.join(process.cwd() + '/dist/' + file.replace('.jsx', '.js')),
|
|
279
|
+
ENTRYPOINT: path.join(process.cwd() + '/dist/' + file.replace('.jsx', '.js').replace('.tsx', '.js')),
|
|
278
280
|
ROOT: process.cwd() + '/app/',
|
|
279
281
|
OUT: path.dirname(file),
|
|
280
|
-
file: process.cwd() + '/dist/' + file.replace('.jsx', '.js'),
|
|
282
|
+
file: process.cwd() + '/dist/' + file.replace('.jsx', '.js').replace('.tsx', '.js'),
|
|
281
283
|
DEV: mode === 'development',
|
|
282
284
|
size: code.length / 1024,
|
|
283
285
|
filePath: file.replace('.jsx', '.js'),
|
|
284
|
-
INPUT: path.join(process.cwd(), file.replace('.js', '.jsx')),
|
|
286
|
+
INPUT: path.join(process.cwd(), file.replace('.js', '.jsx').replace('.tsx', '.js')),
|
|
285
287
|
},
|
|
286
288
|
onExit({ exitCode: code }) {
|
|
287
289
|
if (code === 0) {
|
package/package.json
CHANGED
|
@@ -1,10 +1,15 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vaderjs",
|
|
3
|
-
"version": "1.6.
|
|
3
|
+
"version": "1.6.2",
|
|
4
4
|
"description": "A simple and powerful JavaScript library for building modern web applications.",
|
|
5
5
|
"bin": {
|
|
6
6
|
"vaderjs": "./main.js"
|
|
7
7
|
},
|
|
8
|
+
"repository": {
|
|
9
|
+
"type": "git",
|
|
10
|
+
"url": "https://github.com/Postr-Inc/Vader.js"
|
|
11
|
+
},
|
|
12
|
+
"license":"MIT",
|
|
8
13
|
"dependencies": {
|
|
9
14
|
"ansi-colors": "latest"
|
|
10
15
|
}
|