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 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="./logo.png" height="128">
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
- npx vaderjs @latest
19
+ bun install vaderjs @latest
20
20
  ```
21
21
 
22
22
 
package/README.md CHANGED
@@ -16,7 +16,7 @@
16
16
  # Installation
17
17
 
18
18
  ```js
19
- npx vaderjs @latest
19
+ bun install vaderjs @latest
20
20
  ```
21
21
 
22
22
  ```ts
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
- callback();
208
- this.effect.push(callback);
243
+ executeCallback();
244
+ this.effect.push(callbackId);
209
245
  } else {
210
- for (let i = 0;i < dependencies.length; i++) {
211
- if (this.effect[i] !== dependencies[i]) {
212
- this.effect = dependencies;
213
- callback();
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.0",
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
  }