solidstep 0.3.5 → 0.4.0
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 +235 -5
- package/index.d.ts.map +1 -1
- package/index.js +20 -3
- package/package.json +143 -72
- package/server.d.ts.map +1 -1
- package/server.js +305 -219
- package/utils/cache.d.ts.map +1 -1
- package/utils/cache.js +8 -19
- package/utils/components/form.d.ts +47 -0
- package/utils/components/form.d.ts.map +1 -0
- package/utils/components/form.js +95 -0
- package/utils/csp.d.ts.map +1 -1
- package/utils/csp.js +0 -2
- package/utils/hooks/action-state.d.ts +19 -1
- package/utils/hooks/action-state.d.ts.map +1 -1
- package/utils/hooks/action-state.js +24 -4
- package/utils/hooks/form-status.d.ts +12 -0
- package/utils/hooks/form-status.d.ts.map +1 -0
- package/utils/hooks/form-status.js +16 -0
- package/utils/instrumentation-noop.d.ts +3 -0
- package/utils/instrumentation-noop.d.ts.map +1 -0
- package/utils/instrumentation-noop.js +3 -0
- package/utils/instrumentation.d.ts +94 -0
- package/utils/instrumentation.d.ts.map +1 -0
- package/utils/instrumentation.js +132 -0
- package/utils/loader.d.ts.map +1 -1
- package/utils/loader.js +5 -11
- package/utils/middleware.d.ts +43 -0
- package/utils/middleware.d.ts.map +1 -0
- package/utils/middleware.js +48 -0
- package/utils/path-router.js +10 -10
- package/utils/router.d.ts.map +1 -1
- package/utils/router.js +3 -1
- package/utils/server-action.server.d.ts.map +1 -1
- package/utils/server-action.server.js +56 -22
package/README.md
CHANGED
|
@@ -37,6 +37,7 @@ cd my-app
|
|
|
37
37
|
- `not-found.tsx` - 404 page (root only - optional)
|
|
38
38
|
- `route.ts` - API route handler
|
|
39
39
|
- `middleware.ts` - Request middleware
|
|
40
|
+
- `instrumentation.ts` - Server instrumentation hooks (optional)
|
|
40
41
|
|
|
41
42
|
**A route is defined by either the presence of a `page.tsx` or `route.ts` file in a directory.**
|
|
42
43
|
|
|
@@ -274,6 +275,111 @@ function CreatePostForm() {
|
|
|
274
275
|
}
|
|
275
276
|
```
|
|
276
277
|
|
|
278
|
+
### Form Actions
|
|
279
|
+
|
|
280
|
+
Use the `<Form>` component to submit forms via server actions — similar to Next.js form handling:
|
|
281
|
+
|
|
282
|
+
```tsx
|
|
283
|
+
// app/invoices/actions.ts
|
|
284
|
+
'use server';
|
|
285
|
+
|
|
286
|
+
export async function createInvoice(formData: FormData) {
|
|
287
|
+
const rawFormData = {
|
|
288
|
+
customerId: formData.get('customerId'),
|
|
289
|
+
amount: formData.get('amount'),
|
|
290
|
+
status: formData.get('status'),
|
|
291
|
+
};
|
|
292
|
+
// mutate data, revalidate cache
|
|
293
|
+
}
|
|
294
|
+
```
|
|
295
|
+
|
|
296
|
+
```tsx
|
|
297
|
+
// app/invoices/page.tsx
|
|
298
|
+
import { Form } from 'solidstep/form';
|
|
299
|
+
import { createInvoice } from './actions';
|
|
300
|
+
|
|
301
|
+
export default function Page() {
|
|
302
|
+
return (
|
|
303
|
+
<Form action={createInvoice}>
|
|
304
|
+
<input name="customerId" />
|
|
305
|
+
<input name="amount" type="number" />
|
|
306
|
+
<select name="status">
|
|
307
|
+
<option value="pending">Pending</option>
|
|
308
|
+
<option value="paid">Paid</option>
|
|
309
|
+
</select>
|
|
310
|
+
<button type="submit">Create Invoice</button>
|
|
311
|
+
</Form>
|
|
312
|
+
);
|
|
313
|
+
}
|
|
314
|
+
```
|
|
315
|
+
|
|
316
|
+
**Passing additional arguments with `bind`:**
|
|
317
|
+
|
|
318
|
+
```tsx
|
|
319
|
+
import { Form } from 'solidstep/form';
|
|
320
|
+
import { updateUser } from './actions';
|
|
321
|
+
|
|
322
|
+
export function UserProfile(props: { userId: string }) {
|
|
323
|
+
const updateUserWithId = updateUser.bind(null, props.userId);
|
|
324
|
+
|
|
325
|
+
return (
|
|
326
|
+
<Form action={updateUserWithId}>
|
|
327
|
+
<input type="text" name="name" />
|
|
328
|
+
<button type="submit">Update User Name</button>
|
|
329
|
+
</Form>
|
|
330
|
+
);
|
|
331
|
+
}
|
|
332
|
+
```
|
|
333
|
+
|
|
334
|
+
**Form validation with `useActionState`:**
|
|
335
|
+
|
|
336
|
+
```tsx
|
|
337
|
+
import { useActionState } from 'solidstep/hooks/action-state';
|
|
338
|
+
import { Form } from 'solidstep/form';
|
|
339
|
+
import { signup } from './actions';
|
|
340
|
+
|
|
341
|
+
export function SignupForm() {
|
|
342
|
+
const [state, formAction, pending, error] = useActionState(signup, {
|
|
343
|
+
errors: {} as Record<string, string[]>,
|
|
344
|
+
message: '',
|
|
345
|
+
});
|
|
346
|
+
|
|
347
|
+
return (
|
|
348
|
+
<Form action={formAction}>
|
|
349
|
+
<label for="email">Email</label>
|
|
350
|
+
<input type="email" id="email" name="email" required />
|
|
351
|
+
{state().errors.email && <span>{state().errors.email[0]}</span>}
|
|
352
|
+
<p aria-live="polite">{state().message}</p>
|
|
353
|
+
{error() && <p role="alert" style="color:red">{error()!.message}</p>}
|
|
354
|
+
<button disabled={pending()}>
|
|
355
|
+
{pending() ? 'Signing up...' : 'Sign up'}
|
|
356
|
+
</button>
|
|
357
|
+
</Form>
|
|
358
|
+
);
|
|
359
|
+
}
|
|
360
|
+
```
|
|
361
|
+
|
|
362
|
+
**Pending state with `useFormStatus`:**
|
|
363
|
+
|
|
364
|
+
```tsx
|
|
365
|
+
import { useFormStatus } from 'solidstep/hooks/form-status';
|
|
366
|
+
|
|
367
|
+
export function SubmitButton() {
|
|
368
|
+
const { pending } = useFormStatus();
|
|
369
|
+
|
|
370
|
+
return (
|
|
371
|
+
<button disabled={pending()} type="submit">
|
|
372
|
+
{pending() ? 'Submitting...' : 'Submit'}
|
|
373
|
+
</button>
|
|
374
|
+
);
|
|
375
|
+
}
|
|
376
|
+
```
|
|
377
|
+
|
|
378
|
+
> **Good to know:**
|
|
379
|
+
> - `<Form>` supports progressive enhancement — when JS is disabled, forms submit natively to the server action endpoint.
|
|
380
|
+
> - `useActionState` returns SolidJS accessors: call `state()`, `pending()`, and `error()` to read values. `error()` is `null` until the action throws, and resets to `null` on the next submission.
|
|
381
|
+
> - `useFormStatus` must be used in a component nested inside `<Form>`.
|
|
382
|
+
|
|
277
383
|
### Metadata
|
|
278
384
|
|
|
279
385
|
Define metadata for SEO:
|
|
@@ -341,16 +447,138 @@ export const generateMeta = meta(() => {
|
|
|
341
447
|
|
|
342
448
|
### Middleware
|
|
343
449
|
|
|
344
|
-
Intercept and modify requests:
|
|
450
|
+
Intercept and modify requests. SolidStep's `defineMiddleware` composes an ordered array of middleware units into a single handler, so you can keep concerns (auth, CORS, CSRF, logging) in separate, reusable pieces:
|
|
451
|
+
|
|
452
|
+
```tsx
|
|
453
|
+
// app/middleware.ts
|
|
454
|
+
import { defineMiddleware, type Middleware } from 'solidstep/utils/middleware';
|
|
455
|
+
|
|
456
|
+
const logger: Middleware = {
|
|
457
|
+
onRequest: (event) => {
|
|
458
|
+
console.log('Incoming request:', event.path);
|
|
459
|
+
},
|
|
460
|
+
};
|
|
461
|
+
|
|
462
|
+
const auth: Middleware = {
|
|
463
|
+
onRequest: (event) => {
|
|
464
|
+
if (!event.headers.get('authorization')) {
|
|
465
|
+
// Return a Response to short-circuit — later middleware and the
|
|
466
|
+
// route handler are skipped.
|
|
467
|
+
return new Response('Unauthorized', { status: 401 });
|
|
468
|
+
}
|
|
469
|
+
},
|
|
470
|
+
};
|
|
471
|
+
|
|
472
|
+
export default defineMiddleware([logger, auth]);
|
|
473
|
+
```
|
|
474
|
+
|
|
475
|
+
- `onRequest` hooks run in array order and stop as soon as one returns a `Response` (or calls `event.respondWith(...)`).
|
|
476
|
+
- `onBeforeResponse` hooks always all run, in array order, and receive the resolved response so it can be inspected or mutated.
|
|
477
|
+
|
|
478
|
+
You can still use Vinxi's own single-object form from `vinxi/http` if you prefer:
|
|
345
479
|
|
|
346
480
|
```tsx
|
|
347
481
|
import { defineMiddleware } from 'vinxi/http';
|
|
348
482
|
|
|
349
483
|
export default defineMiddleware({
|
|
350
|
-
onRequest:
|
|
351
|
-
console.log('Incoming request:',
|
|
352
|
-
|
|
353
|
-
|
|
484
|
+
onRequest: (event) => {
|
|
485
|
+
console.log('Incoming request:', event.path);
|
|
486
|
+
},
|
|
487
|
+
});
|
|
488
|
+
```
|
|
489
|
+
|
|
490
|
+
### Instrumentation
|
|
491
|
+
|
|
492
|
+
SolidStep provides a server-side instrumentation API for observability, telemetry, and error tracking. Create an `app/instrumentation.ts` file to hook into the request lifecycle — no configuration required.
|
|
493
|
+
|
|
494
|
+
```tsx
|
|
495
|
+
// app/instrumentation.ts
|
|
496
|
+
import { defineInstrumentation } from 'solidstep/utils/instrumentation';
|
|
497
|
+
|
|
498
|
+
export default defineInstrumentation({
|
|
499
|
+
async register() {
|
|
500
|
+
// Called once at server startup.
|
|
501
|
+
// Initialize your telemetry SDK here (e.g., OpenTelemetry, Sentry).
|
|
502
|
+
console.log('[instrumentation] Server starting...');
|
|
503
|
+
},
|
|
504
|
+
|
|
505
|
+
async onRequest(request, context) {
|
|
506
|
+
// Called before each request is processed.
|
|
507
|
+
context.metadata.requestId = crypto.randomUUID();
|
|
508
|
+
console.log(`[instrumentation] ${request.method} ${context.pathname} (${context.routeType})`);
|
|
509
|
+
},
|
|
510
|
+
|
|
511
|
+
async onResponseEnd(request, context) {
|
|
512
|
+
// Called after the response is complete.
|
|
513
|
+
console.log(`[instrumentation] ${context.statusCode} ${context.pathname} ${context.duration.toFixed(1)}ms`);
|
|
514
|
+
},
|
|
515
|
+
|
|
516
|
+
async onRequestError(error, request, context) {
|
|
517
|
+
// Called when an unhandled error occurs during request processing.
|
|
518
|
+
console.error(`[instrumentation] Error in ${context.pathname}:`, error.message);
|
|
519
|
+
},
|
|
520
|
+
});
|
|
521
|
+
```
|
|
522
|
+
|
|
523
|
+
**Available Hooks:**
|
|
524
|
+
|
|
525
|
+
| Hook | When it fires | Arguments |
|
|
526
|
+
|------|--------------|-----------|
|
|
527
|
+
| `register` | Once at server startup | None |
|
|
528
|
+
| `onRequest` | Before each request | `(request: Request, context: RequestContext)` |
|
|
529
|
+
| `onResponseStart` | When response is ready, before streaming | `(request: Request, response: Response, context: ResponseContext)` |
|
|
530
|
+
| `onResponseEnd` | After response stream is complete | `(request: Request, context: ResponseContext)` |
|
|
531
|
+
| `onRequestError` | When an unhandled error occurs | `(error: Error, context: RequestContext)` |
|
|
532
|
+
|
|
533
|
+
**Context Objects:**
|
|
534
|
+
|
|
535
|
+
- `RequestContext` — includes `routePath`, `pathname`, `routeType` (`'page'` | `'api'` | `'server-action'` | `'not-found'`), `params`, `searchParams`, `startTime`, `startTimeEpoch`, and `metadata`
|
|
536
|
+
- `ResponseContext` — extends `RequestContext` with `statusCode` and `duration` (ms)
|
|
537
|
+
- `metadata` — a mutable `Record<string, unknown>` shared across all hooks for the same request. Use it to pass data between hooks (e.g., OpenTelemetry spans, request IDs).
|
|
538
|
+
|
|
539
|
+
**Key Behaviors:**
|
|
540
|
+
- Zero-config: if `app/instrumentation.ts` doesn't exist, the framework silently uses a no-op fallback
|
|
541
|
+
- `register()` completes before the first request is handled
|
|
542
|
+
- Errors in hooks are caught and logged — they never crash user requests
|
|
543
|
+
- Works with page routes, API routes, and server actions
|
|
544
|
+
- Compatible with OpenTelemetry, Sentry, Datadog, and any Node.js telemetry SDK
|
|
545
|
+
|
|
546
|
+
**OpenTelemetry Example:**
|
|
547
|
+
|
|
548
|
+
```tsx
|
|
549
|
+
// app/instrumentation.ts
|
|
550
|
+
import { defineInstrumentation } from 'solidstep/utils/instrumentation';
|
|
551
|
+
import { NodeSDK } from '@opentelemetry/sdk-node';
|
|
552
|
+
import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http';
|
|
553
|
+
import { trace } from '@opentelemetry/api';
|
|
554
|
+
|
|
555
|
+
let sdk: NodeSDK;
|
|
556
|
+
|
|
557
|
+
export default defineInstrumentation({
|
|
558
|
+
async register() {
|
|
559
|
+
sdk = new NodeSDK({
|
|
560
|
+
traceExporter: new OTLPTraceExporter(),
|
|
561
|
+
serviceName: 'my-solidstep-app',
|
|
562
|
+
});
|
|
563
|
+
sdk.start();
|
|
564
|
+
},
|
|
565
|
+
|
|
566
|
+
async onRequest(request, context) {
|
|
567
|
+
const tracer = trace.getTracer('solidstep');
|
|
568
|
+
const span = tracer.startSpan(`${request.method} ${context.routePath}`);
|
|
569
|
+
context.metadata.span = span;
|
|
570
|
+
},
|
|
571
|
+
|
|
572
|
+
async onResponseEnd(request, context) {
|
|
573
|
+
const span = context.metadata.span as any;
|
|
574
|
+
span?.setAttribute('http.status_code', context.statusCode);
|
|
575
|
+
span?.end();
|
|
576
|
+
},
|
|
577
|
+
|
|
578
|
+
async onRequestError(error, request, context) {
|
|
579
|
+
const span = context.metadata.span as any;
|
|
580
|
+
span?.recordException(error);
|
|
581
|
+
span?.end();
|
|
354
582
|
},
|
|
355
583
|
});
|
|
356
584
|
```
|
|
@@ -833,8 +1061,10 @@ const MyComponent: Component = () => {
|
|
|
833
1061
|
As SolidStep is built using Vite, it follows the same guide as stated in [Vite docs](https://vite.dev/guide/env-and-mode) regarding environment variables.
|
|
834
1062
|
|
|
835
1063
|
## Future Plans
|
|
1064
|
+
- Pre-rendering static pages at build time and partial pre-rendering for dynamic pages
|
|
836
1065
|
- Support for dynamic site.webmanifest, robots.txt, sitemap.xml, manifest.json, and llms.txt
|
|
837
1066
|
- Support loading and error pages for parallel routes
|
|
1067
|
+
- Support caching loaders
|
|
838
1068
|
- Support deferring loaders
|
|
839
1069
|
- Possible SSG, ISR, and PPR
|
|
840
1070
|
- Advanced caching strategies
|
package/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAUxC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,MAAM,CAAC;AAC1C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAExE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,MAAM,CAAC;AAGzC,KAAK,sBAAsB,GAAG,IAAI,CAC9B,YAAY,CAAC,QAAQ,CAAC,EACtB,MAAM,GAAG,YAAY,GAAG,MAAM,GAAG,gBAAgB,GAAG,MAAM,CAC7D,CAAC;AAEF,KAAK,sBAAsB,GAAG,kBAAkB,GAAG;IAC/C,MAAM,CAAC,EAAE,sBAAsB,CAAC;CACnC,CAAC;AAEF,KAAK,MAAM,GAAG;IACV,MAAM,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,cAAc,CAAC,CAAC;IACpD,OAAO,CAAC,EAAE;QACN,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,MAAM,CAAC;QACnC,MAAM,EAAE,GAAG,CAAC;KACf,EAAE,CAAC;IACJ,MAAM,CAAC,EAAE,IAAI,GAAG,aAAa,CAAC;IAC9B,IAAI,CAAC,EACC,sBAAsB,GACtB,CAAC,CAAC,OAAO,EAAE;QACT,MAAM,EAAE,QAAQ,GAAG,QAAQ,CAAC;KAC/B,KAAK,sBAAsB,CAAC,CAAC;CACrC,CAAC;AAEF,eAAO,MAAM,YAAY,GAAI,SAAQ,MAIpC,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAUxC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,MAAM,CAAC;AAC1C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAExE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,MAAM,CAAC;AAGzC,KAAK,sBAAsB,GAAG,IAAI,CAC9B,YAAY,CAAC,QAAQ,CAAC,EACtB,MAAM,GAAG,YAAY,GAAG,MAAM,GAAG,gBAAgB,GAAG,MAAM,CAC7D,CAAC;AAEF,KAAK,sBAAsB,GAAG,kBAAkB,GAAG;IAC/C,MAAM,CAAC,EAAE,sBAAsB,CAAC;CACnC,CAAC;AAEF,KAAK,MAAM,GAAG;IACV,MAAM,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,cAAc,CAAC,CAAC;IACpD,OAAO,CAAC,EAAE;QACN,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,MAAM,CAAC;QACnC,MAAM,EAAE,GAAG,CAAC;KACf,EAAE,CAAC;IACJ,MAAM,CAAC,EAAE,IAAI,GAAG,aAAa,CAAC;IAC9B,IAAI,CAAC,EACC,sBAAsB,GACtB,CAAC,CAAC,OAAO,EAAE;QACT,MAAM,EAAE,QAAQ,GAAG,QAAQ,CAAC;KAC/B,KAAK,sBAAsB,CAAC,CAAC;CACrC,CAAC;AAEF,eAAO,MAAM,YAAY,GAAI,SAAQ,MAIpC,wBAqIA,CAAC"}
|
package/index.js
CHANGED
|
@@ -22,9 +22,9 @@ export const defineConfig = (config = {
|
|
|
22
22
|
};
|
|
23
23
|
// @ts-ignore
|
|
24
24
|
globalThis.__SOLIDSTEP_CONFIG__ = sharedConfig;
|
|
25
|
-
const viteConfig = typeof config.vite === 'function'
|
|
25
|
+
const viteConfig = (typeof config.vite === 'function'
|
|
26
26
|
? config.vite
|
|
27
|
-
: () => config.vite || {};
|
|
27
|
+
: () => config.vite || {});
|
|
28
28
|
const app = createApp({
|
|
29
29
|
server: {
|
|
30
30
|
...config.server,
|
|
@@ -77,7 +77,24 @@ export const defineConfig = (config = {
|
|
|
77
77
|
serverFunctions.server(),
|
|
78
78
|
solid({ ssr: true }),
|
|
79
79
|
viteConfigPlugin('app-server', {
|
|
80
|
-
|
|
80
|
+
resolve: {
|
|
81
|
+
alias: {
|
|
82
|
+
instrumentation: (() => {
|
|
83
|
+
const userInstrumentationTs = join(process.cwd(), 'app', 'instrumentation.ts');
|
|
84
|
+
const userInstrumentationJs = join(process.cwd(), 'app', 'instrumentation.js');
|
|
85
|
+
if (existsSync(userInstrumentationTs)) {
|
|
86
|
+
return userInstrumentationTs;
|
|
87
|
+
}
|
|
88
|
+
else if (existsSync(userInstrumentationJs)) {
|
|
89
|
+
return userInstrumentationJs;
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
return normalize(fileURLToPath(new URL('./utils/instrumentation-noop.js', import.meta.url)));
|
|
93
|
+
}
|
|
94
|
+
})(),
|
|
95
|
+
...(viteConfig({ router: 'server' })?.resolve?.alias || {}),
|
|
96
|
+
},
|
|
97
|
+
},
|
|
81
98
|
}),
|
|
82
99
|
],
|
|
83
100
|
middleware: './app/middleware.ts',
|
package/package.json
CHANGED
|
@@ -1,72 +1,143 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "solidstep",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "Next Step SolidJS Framework for building web applications.",
|
|
5
|
-
"type": "module",
|
|
6
|
-
"author": "HamzaKV <hamzakv333@gmail.com>",
|
|
7
|
-
"repository": {
|
|
8
|
-
"type": "git",
|
|
9
|
-
"url": "https://github.com/HamzaKV/solidstep.git"
|
|
10
|
-
},
|
|
11
|
-
"license": "MIT",
|
|
12
|
-
"exports": {
|
|
13
|
-
".":
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
"./
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
"./
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
"./
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
"./utils/
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
"
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
"
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
"
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
"
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
"
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
"
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
"
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "solidstep",
|
|
3
|
+
"version": "0.4.0",
|
|
4
|
+
"description": "Next Step SolidJS Framework for building web applications.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"author": "HamzaKV <hamzakv333@gmail.com>",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "https://github.com/HamzaKV/solidstep.git"
|
|
10
|
+
},
|
|
11
|
+
"license": "MIT",
|
|
12
|
+
"exports": {
|
|
13
|
+
".": {
|
|
14
|
+
"types": "./index.d.ts",
|
|
15
|
+
"default": "./index.js"
|
|
16
|
+
},
|
|
17
|
+
"./hooks/action-state": {
|
|
18
|
+
"types": "./utils/hooks/action-state.d.ts",
|
|
19
|
+
"default": "./utils/hooks/action-state.js"
|
|
20
|
+
},
|
|
21
|
+
"./form": {
|
|
22
|
+
"types": "./utils/components/form.d.ts",
|
|
23
|
+
"default": "./utils/components/form.js"
|
|
24
|
+
},
|
|
25
|
+
"./hooks/form-status": {
|
|
26
|
+
"types": "./utils/hooks/form-status.d.ts",
|
|
27
|
+
"default": "./utils/hooks/form-status.js"
|
|
28
|
+
},
|
|
29
|
+
"./utils/cache": {
|
|
30
|
+
"types": "./utils/cache.d.ts",
|
|
31
|
+
"default": "./utils/cache.js"
|
|
32
|
+
},
|
|
33
|
+
"./utils/client-only": {
|
|
34
|
+
"types": "./utils/client-only.d.ts",
|
|
35
|
+
"default": "./utils/client-only.js"
|
|
36
|
+
},
|
|
37
|
+
"./utils/cookies": {
|
|
38
|
+
"types": "./utils/cookies.d.ts",
|
|
39
|
+
"default": "./utils/cookies.js"
|
|
40
|
+
},
|
|
41
|
+
"./utils/cors": {
|
|
42
|
+
"types": "./utils/cors.d.ts",
|
|
43
|
+
"default": "./utils/cors.js"
|
|
44
|
+
},
|
|
45
|
+
"./utils/csp": {
|
|
46
|
+
"types": "./utils/csp.d.ts",
|
|
47
|
+
"default": "./utils/csp.js"
|
|
48
|
+
},
|
|
49
|
+
"./utils/csrf": {
|
|
50
|
+
"types": "./utils/csrf.d.ts",
|
|
51
|
+
"default": "./utils/csrf.js"
|
|
52
|
+
},
|
|
53
|
+
"./utils/error-handler": {
|
|
54
|
+
"types": "./utils/error-handler.d.ts",
|
|
55
|
+
"default": "./utils/error-handler.js"
|
|
56
|
+
},
|
|
57
|
+
"./utils/fetch.client": {
|
|
58
|
+
"types": "./utils/fetch.client.d.ts",
|
|
59
|
+
"default": "./utils/fetch.client.js"
|
|
60
|
+
},
|
|
61
|
+
"./utils/fetch.server": {
|
|
62
|
+
"types": "./utils/fetch.server.d.ts",
|
|
63
|
+
"default": "./utils/fetch.server.js"
|
|
64
|
+
},
|
|
65
|
+
"./utils/instrumentation": {
|
|
66
|
+
"types": "./utils/instrumentation.d.ts",
|
|
67
|
+
"default": "./utils/instrumentation.js"
|
|
68
|
+
},
|
|
69
|
+
"./utils/loader": {
|
|
70
|
+
"types": "./utils/loader.d.ts",
|
|
71
|
+
"default": "./utils/loader.js"
|
|
72
|
+
},
|
|
73
|
+
"./utils/logger": {
|
|
74
|
+
"types": "./utils/logger.d.ts",
|
|
75
|
+
"default": "./utils/logger.js"
|
|
76
|
+
},
|
|
77
|
+
"./utils/meta": {
|
|
78
|
+
"types": "./utils/meta.d.ts",
|
|
79
|
+
"default": "./utils/meta.js"
|
|
80
|
+
},
|
|
81
|
+
"./utils/middleware": {
|
|
82
|
+
"types": "./utils/middleware.d.ts",
|
|
83
|
+
"default": "./utils/middleware.js"
|
|
84
|
+
},
|
|
85
|
+
"./utils/options": {
|
|
86
|
+
"types": "./utils/options.d.ts",
|
|
87
|
+
"default": "./utils/options.js"
|
|
88
|
+
},
|
|
89
|
+
"./utils/redirect": {
|
|
90
|
+
"types": "./utils/redirect.d.ts",
|
|
91
|
+
"default": "./utils/redirect.js"
|
|
92
|
+
},
|
|
93
|
+
"./utils/server-only": {
|
|
94
|
+
"types": "./utils/server-only.d.ts",
|
|
95
|
+
"default": "./utils/server-only.js"
|
|
96
|
+
}
|
|
97
|
+
},
|
|
98
|
+
"scripts": {
|
|
99
|
+
"clean": "rimraf ./dist",
|
|
100
|
+
"copy-files:root": "copyfiles -u 0 README.md package.json generate/**/* LICENSE ./dist",
|
|
101
|
+
"build": "pnpm clean && tsc && pnpm copy-files:root",
|
|
102
|
+
"test": "vitest run",
|
|
103
|
+
"test:watch": "vitest",
|
|
104
|
+
"test:local": "pnpm build && cd ./dist && pnpm link --global",
|
|
105
|
+
"test:local:clean": "pnpm unlink && pnpm clean",
|
|
106
|
+
"roll": "pnpm build && cd dist && npm publish"
|
|
107
|
+
},
|
|
108
|
+
"keywords": [
|
|
109
|
+
"solidjs",
|
|
110
|
+
"web-development",
|
|
111
|
+
"typescript",
|
|
112
|
+
"npm",
|
|
113
|
+
"solidstep",
|
|
114
|
+
"framework"
|
|
115
|
+
],
|
|
116
|
+
"dependencies": {
|
|
117
|
+
"@vinxi/server-functions": "0.5.1",
|
|
118
|
+
"pino": "^10.1.0",
|
|
119
|
+
"seroval": "^1.3.2",
|
|
120
|
+
"seroval-plugins": "^1.3.2",
|
|
121
|
+
"undici": "^7.15.0",
|
|
122
|
+
"vite-plugin-solid": "^2.11.7"
|
|
123
|
+
},
|
|
124
|
+
"devDependencies": {
|
|
125
|
+
"@vitest/coverage-v8": "^4.1.8",
|
|
126
|
+
"copyfiles": "^2.4.1",
|
|
127
|
+
"rimraf": "^6.0.1",
|
|
128
|
+
"solid-js": "^1.9.7",
|
|
129
|
+
"typescript": "^5.8.3",
|
|
130
|
+
"vinxi": "^0.5.8",
|
|
131
|
+
"vitest": "^4.1.8"
|
|
132
|
+
},
|
|
133
|
+
"peerDependencies": {
|
|
134
|
+
"solid-js": "^1.9.7",
|
|
135
|
+
"vinxi": "^0.5.8"
|
|
136
|
+
},
|
|
137
|
+
"engines": {
|
|
138
|
+
"node": ">=20"
|
|
139
|
+
},
|
|
140
|
+
"publishConfig": {
|
|
141
|
+
"access": "public"
|
|
142
|
+
}
|
|
143
|
+
}
|
package/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../server.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../server.ts"],"names":[],"mappings":"AA2iBA,QAAA,MAAM,OAAO,2FAmdX,CAAC;AAEH,eAAe,OAAO,CAAC"}
|