@stacksjs/actions 0.70.84 → 0.70.86
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/dist/action.js +1 -1
- package/dist/actions.js +1 -1
- package/dist/add.js +1 -1
- package/dist/ai/request-model-access.js +1 -1
- package/dist/blog.js +1 -1
- package/dist/build/frontend-static.js +1 -1
- package/dist/build.js +1 -1
- package/dist/chunk-0c8sd1t6.js +2 -0
- package/dist/{chunk-hv8tkjw2.js → chunk-0g2nzhx9.js} +2 -2
- package/dist/chunk-0gadhvn7.js +3 -0
- package/dist/{chunk-9sx16wyz.js → chunk-0h27aa4r.js} +1 -1
- package/dist/{chunk-f8z1aft6.js → chunk-3peh8kqs.js} +1 -1
- package/dist/{chunk-73y0wp0s.js → chunk-62gdfav8.js} +2 -2
- package/dist/{chunk-d5mbs5zz.js → chunk-6bk53y02.js} +1 -1
- package/dist/{chunk-dxvgx0r7.js → chunk-78c5n3s2.js} +2 -2
- package/dist/{chunk-heh4x32p.js → chunk-c74qv38e.js} +2 -2
- package/dist/{chunk-rft5b6wr.js → chunk-e142dheq.js} +1 -1
- package/dist/{chunk-k7n6c9hm.js → chunk-ec4gky40.js} +1 -1
- package/dist/chunk-h3d81wrg.js +3 -0
- package/dist/{chunk-hr9ndn21.js → chunk-m3q0x4h0.js} +1 -1
- package/dist/{chunk-30cc35np.js → chunk-mqgbyhph.js} +1 -1
- package/dist/{chunk-t5j470r2.js → chunk-n5eqwhck.js} +2 -2
- package/dist/{chunk-8maaf0ze.js → chunk-nsvnqv8y.js} +2 -2
- package/dist/{chunk-w363nwy3.js → chunk-nty6mmx4.js} +1 -1
- package/dist/{chunk-h10aj7jf.js → chunk-tpb8jgsk.js} +2 -2
- package/dist/{chunk-wtnp31q5.js → chunk-tsbk5vne.js} +1 -1
- package/dist/{chunk-w4erevzw.js → chunk-y6e448he.js} +2 -2
- package/dist/commit.js +1 -1
- package/dist/deploy/index.js +2 -2
- package/dist/dev/api.js +1 -1
- package/dist/dev/dashboard-globals.js +1 -1
- package/dist/dev/dashboard-utils.js +1 -1
- package/dist/dev/dashboard.js +1 -1
- package/dist/dev/index.js +1 -1
- package/dist/dev/migrate-watcher.js +1 -1
- package/dist/dev/views.js +1 -1
- package/dist/discover-packages.js +1 -1
- package/dist/examples.js +1 -1
- package/dist/generate/component-meta.js +1 -1
- package/dist/generate/env-files.js +1 -1
- package/dist/generate/ide-helpers.js +1 -1
- package/dist/generate/index.js +1 -1
- package/dist/generate/lib-entries.js +1 -1
- package/dist/generate/vscode-custom-data.js +1 -1
- package/dist/helpers/component-meta.js +1 -1
- package/dist/helpers/index.js +1 -1
- package/dist/helpers/lib-entries.js +1 -1
- package/dist/helpers/package-json.js +1 -1
- package/dist/helpers/utils.js +1 -1
- package/dist/helpers/vscode-custom-data.js +1 -1
- package/dist/index.js +1 -1
- package/dist/lint/fix.js +1 -1
- package/dist/lint/index.js +1 -1
- package/dist/lint/lint.js +1 -1
- package/dist/make-command.js +44 -1
- package/dist/make-job.js +128 -1
- package/dist/make-policy.js +93 -1
- package/dist/make-resource.js +112 -1
- package/dist/make.js +1 -1
- package/dist/orm/base.js +1 -1
- package/dist/release.js +1 -1
- package/dist/run-action.js +1 -1
- package/dist/scaffold-crud.js +86 -1
- package/dist/setup/index.js +1 -1
- package/dist/setup/ssl.js +1 -1
- package/dist/stacks.js +1 -1
- package/dist/templates.js +1 -1
- package/dist/types.js +1 -1
- package/dist/upgrade/dependencies.js +1 -1
- package/dist/upgrade/framework-utils.js +1 -1
- package/dist/upgrade/framework.js +1 -1
- package/dist/upgrade/index.js +1 -1
- package/dist/upgrade/packages.js +1 -1
- package/dist/upgrade.js +1 -1
- package/package.json +17 -16
- package/dist/chunk-0wyxyqak.js +0 -3
- package/dist/chunk-8kvzjd10.js +0 -3
- package/dist/chunk-acyw294f.js +0 -130
- package/dist/chunk-ay41a7jn.js +0 -3
- package/dist/chunk-e87s6b8r.js +0 -46
- package/dist/chunk-g6k41p49.js +0 -1
- package/dist/chunk-gcjrdkq7.js +0 -95
- package/dist/chunk-h63c1v89.js +0 -3
- package/dist/chunk-n057zfgw.js +0 -114
- package/dist/chunk-v0hqskdk.js +0 -3
- package/dist/chunk-vv4nqhgg.js +0 -3
- package/dist/chunk-x0cnhg3z.js +0 -88
package/dist/make-job.js
CHANGED
|
@@ -1,2 +1,129 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{
|
|
2
|
+
import"./chunk-h3d81wrg.js";import{log as A}from"@stacksjs/logging";import*as H from"@stacksjs/path";import{writeFile as L}from"@stacksjs/storage";async function T(v){let x=v,y=v.name;if(!y)return A.error("Job name is required"),!1;let z=y.endsWith("Job")?y:`${y}Job`,I=x.class??!1?Q(z,x):M(z,x),E=H.userJobsPath(`${z}.ts`);try{return await L(E,I),A.success(`Created job: ${E}`),!0}catch(K){return A.error(`Failed to create job: ${K.message}`),!1}}function M(v,x){let y=x.queue??"default",z=x.tries??3,D=x.backoff??3;return`import { Job } from '@stacksjs/queue'
|
|
3
|
+
|
|
4
|
+
export default new Job({
|
|
5
|
+
/**
|
|
6
|
+
* The job name (optional, defaults to filename)
|
|
7
|
+
*/
|
|
8
|
+
name: '${v}',
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* A description of what this job does (optional)
|
|
12
|
+
*/
|
|
13
|
+
description: '${v} job',
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* The queue this job should be dispatched to
|
|
17
|
+
*/
|
|
18
|
+
queue: '${y}',
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Number of times to retry if the job fails
|
|
22
|
+
*/
|
|
23
|
+
tries: ${z},
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Seconds to wait between retry attempts
|
|
27
|
+
*/
|
|
28
|
+
backoff: ${D},
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Cron expression for scheduled jobs (optional)
|
|
32
|
+
* Examples:
|
|
33
|
+
* - '* * * * *' - Every minute
|
|
34
|
+
* - '0 * * * *' - Every hour
|
|
35
|
+
* - '0 0 * * *' - Every day at midnight
|
|
36
|
+
*/
|
|
37
|
+
// rate: '* * * * *',
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Backoff configuration for advanced retry strategies (optional)
|
|
41
|
+
*/
|
|
42
|
+
// backoffConfig: {
|
|
43
|
+
// strategy: 'exponential', // 'fixed' | 'exponential' | 'linear'
|
|
44
|
+
// initialDelay: 1000,
|
|
45
|
+
// factor: 2,
|
|
46
|
+
// maxDelay: 60000,
|
|
47
|
+
// },
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Handle the job
|
|
51
|
+
* @param payload - The job payload data
|
|
52
|
+
* @returns The result of the job processing
|
|
53
|
+
*/
|
|
54
|
+
async handle(payload: Record<string, unknown>) {
|
|
55
|
+
// Add your job logic here.
|
|
56
|
+
console.log('Processing job with payload:', payload)
|
|
57
|
+
|
|
58
|
+
return { success: true }
|
|
59
|
+
},
|
|
60
|
+
})
|
|
61
|
+
`}function Q(v,x){let y=x.queue??"default",z=x.tries??3;return`import { log } from '@stacksjs/logging'
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* ${v}
|
|
65
|
+
*
|
|
66
|
+
* Generated job class.
|
|
67
|
+
*/
|
|
68
|
+
export default class ${v} {
|
|
69
|
+
/**
|
|
70
|
+
* Job configuration
|
|
71
|
+
*/
|
|
72
|
+
public static config = {
|
|
73
|
+
/**
|
|
74
|
+
* The queue this job should be dispatched to
|
|
75
|
+
*/
|
|
76
|
+
queue: '${y}',
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Cron expression for scheduled jobs (optional)
|
|
80
|
+
* Examples:
|
|
81
|
+
* - '* * * * *' - Every minute
|
|
82
|
+
* - '0 * * * *' - Every hour
|
|
83
|
+
* - '0 0 * * *' - Every day at midnight
|
|
84
|
+
*/
|
|
85
|
+
// schedule: '0 0 * * *',
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* Prevent overlapping job executions
|
|
89
|
+
*/
|
|
90
|
+
withoutOverlapping: false,
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* Timeout in seconds
|
|
94
|
+
*/
|
|
95
|
+
timeout: 60,
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* Number of retry attempts
|
|
99
|
+
*/
|
|
100
|
+
retries: ${z},
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* Delay between retries in seconds
|
|
104
|
+
*/
|
|
105
|
+
retryAfter: [60, 120, 300],
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* Execute the job
|
|
110
|
+
* @param payload - The job payload data
|
|
111
|
+
*/
|
|
112
|
+
public static async handle(payload?: Record<string, unknown>): Promise<{ success: boolean }> {
|
|
113
|
+
try {
|
|
114
|
+
log.info('${v}: Starting job execution')
|
|
115
|
+
|
|
116
|
+
// Add your job logic here.
|
|
117
|
+
console.log('Processing with payload:', payload)
|
|
118
|
+
|
|
119
|
+
log.info('${v}: Job completed successfully')
|
|
120
|
+
|
|
121
|
+
return { success: true }
|
|
122
|
+
}
|
|
123
|
+
catch (error) {
|
|
124
|
+
log.error('${v}: Job failed:', error)
|
|
125
|
+
throw error
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
`}export{T as makeJob};
|
package/dist/make-policy.js
CHANGED
|
@@ -1,2 +1,94 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{
|
|
2
|
+
import{Lb as O}from"./chunk-h3d81wrg.js";import{log as B}from"@stacksjs/logging";import*as J from"@stacksjs/path";import{doesExist as Q,get as R,writeFile as L}from"@stacksjs/storage";async function X(q){let b=q.name;if(!b)return B.error("Policy name is required"),!1;let z=b.endsWith("Policy")?b:`${b}Policy`,v=q.model||z.replace("Policy",""),I=T(z,v),H=J.appPath(`Policies/${z}.ts`);try{let G=J.appPath("Policies");if(!Q(G)){let{mkdirSync:K}=await import("@stacksjs/storage");K(G,{recursive:!0})}if(await L(H,I),B.success(`Created policy: ${H}`),q.register!==!1)await U(v,z);return!0}catch(G){return B.error(`Failed to create policy: ${G.message}`),!1}}function T(q,b){return`import type _User from '../models/User'
|
|
3
|
+
import { BasePolicy } from '@stacksjs/auth'
|
|
4
|
+
|
|
5
|
+
type UserModel = _User
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* ${q}
|
|
9
|
+
*
|
|
10
|
+
* This policy controls authorization for ${b} model actions.
|
|
11
|
+
*
|
|
12
|
+
* Usage:
|
|
13
|
+
* 1. Register in app/Gates.ts:
|
|
14
|
+
* policies: { '${b}': '${q}' }
|
|
15
|
+
*
|
|
16
|
+
* 2. Use in your code:
|
|
17
|
+
* import { Gate } from '@stacksjs/auth'
|
|
18
|
+
* await Gate.authorize('view', user, ${b.toLowerCase()})
|
|
19
|
+
*
|
|
20
|
+
* 3. Or use the middleware:
|
|
21
|
+
* route.put('/${b.toLowerCase()}s/:${b.toLowerCase()}', 'Update${b}')
|
|
22
|
+
* .middleware('can:update,${b.toLowerCase()}')
|
|
23
|
+
*/
|
|
24
|
+
|
|
25
|
+
// TODO: Import or define your ${b} type
|
|
26
|
+
interface ${b} {
|
|
27
|
+
id: number
|
|
28
|
+
user_id: number
|
|
29
|
+
// Add your model properties here
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export default class ${q} extends BasePolicy<${b}> {
|
|
33
|
+
/**
|
|
34
|
+
* Run before any other checks.
|
|
35
|
+
* Return true to allow, false to deny, null to continue.
|
|
36
|
+
*/
|
|
37
|
+
before(user: UserModel | null, ability: string): boolean | null {
|
|
38
|
+
// Example: Admins can do anything
|
|
39
|
+
// if (user?.role === 'admin') return true
|
|
40
|
+
return null
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Determine if the user can view any ${b.toLowerCase()}s.
|
|
45
|
+
*/
|
|
46
|
+
viewAny(user: UserModel | null): boolean {
|
|
47
|
+
return true
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Determine if the user can view the ${b.toLowerCase()}.
|
|
52
|
+
*/
|
|
53
|
+
view(user: UserModel | null, model: ${b}): boolean {
|
|
54
|
+
return true
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Determine if the user can create ${b.toLowerCase()}s.
|
|
59
|
+
*/
|
|
60
|
+
create(user: UserModel | null): boolean {
|
|
61
|
+
return user !== null
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Determine if the user can update the ${b.toLowerCase()}.
|
|
66
|
+
*/
|
|
67
|
+
update(user: UserModel | null, model: ${b}): boolean {
|
|
68
|
+
return user?.id === model.user_id
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Determine if the user can delete the ${b.toLowerCase()}.
|
|
73
|
+
*/
|
|
74
|
+
delete(user: UserModel | null, model: ${b}): boolean {
|
|
75
|
+
return user?.id === model.user_id
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Determine if the user can restore the ${b.toLowerCase()}.
|
|
80
|
+
*/
|
|
81
|
+
restore(user: UserModel | null, model: ${b}): boolean {
|
|
82
|
+
return user?.id === model.user_id
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Determine if the user can permanently delete the ${b.toLowerCase()}.
|
|
87
|
+
*/
|
|
88
|
+
forceDelete(user: UserModel | null, model: ${b}): boolean {
|
|
89
|
+
return user?.id === model.user_id
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
`}async function U(q,b){let z=J.appPath("Gates.ts");try{let v=await R(z),I=v.match(/export const policies[^{]*\{([^}]*)\}/);if(I){let H=I[1]??"";if(H.includes(`'${q}'`)){B.info(`Policy for '${q}' already registered in Gates.ts`);return}let G=` '${q}': '${b}',
|
|
93
|
+
`,K=`${H.trimEnd()}
|
|
94
|
+
${G}`;v=v.replace(/export const policies[^{]*\{([^}]*)\}/,`export const policies: Record<string, string | { policy: string, model?: string }> = {${K}}`),await L(z,v),B.success(`Registered policy '${b}' for '${q}' in Gates.ts`)}}catch(v){B.warn(`Could not register policy in Gates.ts: ${v.message}`),B.info("You may need to manually add it to app/Gates.ts")}}export{X as makePolicy};
|
package/dist/make-resource.js
CHANGED
|
@@ -1,2 +1,113 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{
|
|
2
|
+
import{Lb as G}from"./chunk-h3d81wrg.js";import{log as x}from"@stacksjs/logging";import*as z from"@stacksjs/path";import{doesExist as H,writeFile as I}from"@stacksjs/storage";async function O(q){let j=q.name;if(!j)return x.error("Resource name is required"),!1;let v=j.endsWith("Resource")?j:`${j}Resource`,A=q.model||v.replace("Resource",""),F=q.collection?K(v,A):J(v,A),B=z.appPath("Resources");if(!H(B)){let{mkdirSync:w}=await import("@stacksjs/storage");w(B,{recursive:!0})}let E=z.appPath(`Resources/${v}.ts`);try{return await I(E,F),x.success(`Created resource: ${E}`),!0}catch(w){return x.error(`Failed to create resource: ${w.message}`),!1}}function J(q,j){return`import type { Request } from '@stacksjs/router'
|
|
3
|
+
import { JsonResource } from '@stacksjs/api'
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* ${q}
|
|
7
|
+
*
|
|
8
|
+
* Transforms ${j} model data for API responses.
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* // Single resource
|
|
12
|
+
* return new ${q}(${j.toLowerCase()}).toResponse()
|
|
13
|
+
*
|
|
14
|
+
* // Collection
|
|
15
|
+
* return ${q}.collection(${j.toLowerCase()}s).toResponse()
|
|
16
|
+
*
|
|
17
|
+
* // With additional data
|
|
18
|
+
* return new ${q}(${j.toLowerCase()})
|
|
19
|
+
* .withAdditional({ message: 'Success' })
|
|
20
|
+
* .toResponse()
|
|
21
|
+
*/
|
|
22
|
+
|
|
23
|
+
// TODO: Import or define your ${j} type
|
|
24
|
+
interface ${j} {
|
|
25
|
+
id: number
|
|
26
|
+
name: string
|
|
27
|
+
created_at: Date
|
|
28
|
+
updated_at: Date
|
|
29
|
+
// Add your model properties here
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export default class ${q} extends JsonResource<${j}> {
|
|
33
|
+
/**
|
|
34
|
+
* Transform the resource into an array.
|
|
35
|
+
*/
|
|
36
|
+
toArray(request?: Request): Record<string, any> {
|
|
37
|
+
return {
|
|
38
|
+
id: this.resource.id,
|
|
39
|
+
name: this.resource.name,
|
|
40
|
+
|
|
41
|
+
// Conditional fields
|
|
42
|
+
// secret: this.when(request?.user?.isAdmin, this.resource.secret),
|
|
43
|
+
|
|
44
|
+
// Loaded relationships
|
|
45
|
+
// posts: this.whenLoaded('posts', () =>
|
|
46
|
+
// PostResource.collection(this.resource.posts)
|
|
47
|
+
// ),
|
|
48
|
+
|
|
49
|
+
// Relationship counts
|
|
50
|
+
// posts_count: this.whenCounted('posts'),
|
|
51
|
+
|
|
52
|
+
// Timestamps
|
|
53
|
+
created_at: this.resource.created_at,
|
|
54
|
+
updated_at: this.resource.updated_at,
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
`}function K(q,j){let v=q.replace("Collection","");return`import type { Request } from '@stacksjs/router'
|
|
59
|
+
import { JsonResource, ResourceCollection } from '@stacksjs/api'
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* ${q}
|
|
63
|
+
*
|
|
64
|
+
* Collection resource for ${j} with custom collection behavior.
|
|
65
|
+
*
|
|
66
|
+
* @example
|
|
67
|
+
* return new ${q}(${j.toLowerCase()}s).toResponse()
|
|
68
|
+
*/
|
|
69
|
+
|
|
70
|
+
// TODO: Import or define your ${j} type
|
|
71
|
+
interface ${j} {
|
|
72
|
+
id: number
|
|
73
|
+
name: string
|
|
74
|
+
created_at: Date
|
|
75
|
+
updated_at: Date
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Individual resource for the collection
|
|
80
|
+
*/
|
|
81
|
+
class ${v} extends JsonResource<${j}> {
|
|
82
|
+
toArray(request?: Request): Record<string, any> {
|
|
83
|
+
return {
|
|
84
|
+
id: this.resource.id,
|
|
85
|
+
name: this.resource.name,
|
|
86
|
+
created_at: this.resource.created_at,
|
|
87
|
+
updated_at: this.resource.updated_at,
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* Collection resource with custom behavior
|
|
94
|
+
*/
|
|
95
|
+
export default class ${q} extends ResourceCollection<${j}, ${v}> {
|
|
96
|
+
constructor(resources: ${j}[]) {
|
|
97
|
+
super(resources, ${v})
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* Add collection-level data to the response
|
|
102
|
+
*/
|
|
103
|
+
toResponse(request?: Request): Record<string, any> {
|
|
104
|
+
return {
|
|
105
|
+
...super.toResponse(request),
|
|
106
|
+
meta: {
|
|
107
|
+
total: this.count(),
|
|
108
|
+
// Add any collection-level metadata here
|
|
109
|
+
},
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
`}export{O as makeResource};
|
package/dist/make.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{
|
|
2
|
+
import{A as k,B as l,C as m,D as n,E as o,F as p,G as q,H as r,I as s,J as t,K as u,L as v,M as w,N as x,O as y,P as z,Q as A,R as B,q as a,r as b,s as c,t as d,u as e,v as f,w as g,x as h,y as i,z as j}from"./chunk-c74qv38e.js";import"./chunk-nty6mmx4.js";import"./chunk-s735m9mg.js";import"./chunk-0gadhvn7.js";import"./chunk-h3d81wrg.js";export{a as setDryRun,v as makeStack,y as makeQueueTable,p as makePage,m as makeNotification,o as makeMail,t as makeLanguage,r as makeFunction,i as makeDatabase,f as makeComponent,z as makeCertificate,e as makeAction,d as make,b as isDryRunActive,c as invoke,k as factory,q as createPage,w as createNotification,A as createModel,x as createMigration,B as createMiddleware,n as createMail,u as createLanguage,s as createFunction,l as createFactory,j as createDatabase,h as createComponent,g as createAction};
|
package/dist/orm/base.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import"../chunk-
|
|
2
|
+
import"../chunk-h3d81wrg.js";var c=void 0;export{c as default};
|
package/dist/release.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
#!/usr/bin/env bun
|
|
2
2
|
// @bun
|
|
3
|
-
import"./chunk-
|
|
3
|
+
import"./chunk-0c8sd1t6.js";import"./chunk-cdk2r2jd.js";import"./chunk-n5eqwhck.js";import"./chunk-62gdfav8.js";import"./chunk-78c5n3s2.js";import"./chunk-tpb8jgsk.js";import"./chunk-tsbk5vne.js";import"./chunk-s735m9mg.js";import"./chunk-6bk53y02.js";import{Jb as C}from"./chunk-0gadhvn7.js";import"./chunk-h3d81wrg.js";import{parseOptions as G}from"@stacksjs/cli";import{app as H}from"@stacksjs/config";import{Action as q}from"@stacksjs/enums";import{log as E}from"@stacksjs/logging";import{projectPath as I}from"@stacksjs/path";var J=G()??{},z={};for(let[B,F]of Object.entries(J)){if(B==="--"||B==="_")continue;z[B]=F}var K=z.dryRun===!0||z.dryRun==="true",L=K?[q.GenerateLibraryEntries,q.Bump]:[q.GenerateLibraryEntries,q.LintFix,q.Bump],x=await C(L,{cwd:I(),...z});if(x&&x.isErr)E.error(`Release failed: ${x.error?.message??String(x.error)}`),process.exit(1);E.success(`Successfully released ${H.name}`);
|
package/dist/run-action.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import
|
|
2
|
+
import"./chunk-h3d81wrg.js";export{i as runAction};
|
package/dist/scaffold-crud.js
CHANGED
|
@@ -1,2 +1,87 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{
|
|
2
|
+
import{r as x}from"./chunk-c74qv38e.js";import"./chunk-nty6mmx4.js";import"./chunk-s735m9mg.js";import"./chunk-0gadhvn7.js";import"./chunk-h3d81wrg.js";import{italic as I}from"@stacksjs/cli";import{log as W}from"@stacksjs/logging";import{path as Z}from"@stacksjs/path";import{writeTextFile as L}from"@stacksjs/storage";var P={str:"string",string:"string",varchar:"string",text:"text",longtext:"text",int:"number",integer:"number",number:"number",num:"number",bool:"boolean",boolean:"boolean",date:"date",datetime:"date",json:"json"};function U(G){if(!G)return[];let H=G.split(",").map((q)=>q.trim()).filter(Boolean),J=[];for(let q of H){let[K,O="string"]=q.split(":"),Q=K?.trim();if(!Q)continue;let B=P[O.trim().toLowerCase()]??"string";J.push({name:Q,type:B})}return J}function V(G){if(!G)return G;let H=G.toLowerCase();if(H.endsWith("s")||H.endsWith("x")||H.endsWith("z")||H.endsWith("ch")||H.endsWith("sh"))return`${G}es`;if(H.endsWith("y")&&!/[aeiou]y$/.test(H))return`${G.slice(0,-1)}ies`;return`${G}s`}function v(G){return G.replace(/(^|[-_\s])(\w)/g,(H,J,q)=>String(q).toUpperCase())}function X(G){return G.replace(/([a-z0-9])([A-Z])/g,"$1_$2").replace(/[-\s]+/g,"_").toLowerCase()}function Y(G){if(G.length===0)return" title: { type: 'string', fillable: true, validation: { rule: schema.string().required() } },";return G.map((H)=>{let J=H.type,q=J==="number"?"schema.number()":J==="boolean"?"schema.boolean()":J==="date"?"schema.date()":J==="json"?"schema.object({})":"schema.string()",K=J==="number"?"number":J==="boolean"?"boolean":J==="date"?"date":J==="json"?"json":"string";return` ${H.name}: { type: '${K}', fillable: true, validation: { rule: ${q} } },`}).join(`
|
|
3
|
+
`)}function _(G){if(G.length===0)return" .addColumn('title', 'varchar(255)', col => col.notNull())";return G.map((H)=>{switch(H.type){case"number":return` .addColumn('${H.name}', 'integer')`;case"boolean":return` .addColumn('${H.name}', 'boolean', col => col.defaultTo(false))`;case"text":return` .addColumn('${H.name}', 'text')`;case"date":return` .addColumn('${H.name}', 'timestamp')`;case"json":return` .addColumn('${H.name}', 'text')`;default:return` .addColumn('${H.name}', 'varchar(255)')`}}).join(`
|
|
4
|
+
`)}function D(G,H,J){let q=v(G);switch(H){case"Index":return`import { Action } from '@stacksjs/actions'
|
|
5
|
+
import ${q} from '~/app/Models/${q}'
|
|
6
|
+
|
|
7
|
+
export default new Action({
|
|
8
|
+
name: '${q}IndexAction',
|
|
9
|
+
description: 'List ${V(q)}',
|
|
10
|
+
|
|
11
|
+
async handle() {
|
|
12
|
+
return await ${q}.all()
|
|
13
|
+
},
|
|
14
|
+
})`;case"Show":return`import { Action } from '@stacksjs/actions'
|
|
15
|
+
import ${q} from '~/app/Models/${q}'
|
|
16
|
+
|
|
17
|
+
export default new Action({
|
|
18
|
+
name: '${q}ShowAction',
|
|
19
|
+
description: 'Show a single ${q}',
|
|
20
|
+
|
|
21
|
+
async handle(request) {
|
|
22
|
+
const id = Number(request.get('id'))
|
|
23
|
+
return await ${q}.findOrFail(id)
|
|
24
|
+
},
|
|
25
|
+
})`;case"Store":{let K=(J.length>0?J:[{name:"title",type:"string"}]).map((O)=>`'${O.name}'`).join(", ");return`import { Action } from '@stacksjs/actions'
|
|
26
|
+
import ${q} from '~/app/Models/${q}'
|
|
27
|
+
|
|
28
|
+
export default new Action({
|
|
29
|
+
name: '${q}StoreAction',
|
|
30
|
+
description: 'Create a new ${q}',
|
|
31
|
+
|
|
32
|
+
async handle(request) {
|
|
33
|
+
const data = request.only([${K}])
|
|
34
|
+
return await ${q}.create(data)
|
|
35
|
+
},
|
|
36
|
+
})`}case"Update":{let K=(J.length>0?J:[{name:"title",type:"string"}]).map((O)=>`'${O.name}'`).join(", ");return`import { Action } from '@stacksjs/actions'
|
|
37
|
+
import ${q} from '~/app/Models/${q}'
|
|
38
|
+
|
|
39
|
+
export default new Action({
|
|
40
|
+
name: '${q}UpdateAction',
|
|
41
|
+
description: 'Update an existing ${q}',
|
|
42
|
+
|
|
43
|
+
async handle(request) {
|
|
44
|
+
const id = Number(request.get('id'))
|
|
45
|
+
const data = request.only([${K}])
|
|
46
|
+
return await ${q}.update(id, data)
|
|
47
|
+
},
|
|
48
|
+
})`}case"Destroy":return`import { Action } from '@stacksjs/actions'
|
|
49
|
+
import ${q} from '~/app/Models/${q}'
|
|
50
|
+
|
|
51
|
+
export default new Action({
|
|
52
|
+
name: '${q}DestroyAction',
|
|
53
|
+
description: 'Delete a ${q}',
|
|
54
|
+
|
|
55
|
+
async handle(request) {
|
|
56
|
+
const id = Number(request.get('id'))
|
|
57
|
+
const deleted = await ${q}.delete(id)
|
|
58
|
+
return { deleted }
|
|
59
|
+
},
|
|
60
|
+
})`}}function E(G,H){return`import { defineModel } from '@stacksjs/orm'
|
|
61
|
+
import { schema } from '@stacksjs/validation'
|
|
62
|
+
|
|
63
|
+
export default defineModel({
|
|
64
|
+
name: '${v(G)}',
|
|
65
|
+
table: '${V(X(G))}',
|
|
66
|
+
attributes: {
|
|
67
|
+
${Y(H)}
|
|
68
|
+
},
|
|
69
|
+
traits: { useTimestamps: true, useUuid: false },
|
|
70
|
+
} as const)
|
|
71
|
+
`}function N(G,H){return`import type { Database } from '@stacksjs/database'
|
|
72
|
+
import { sql } from '@stacksjs/database'
|
|
73
|
+
|
|
74
|
+
export async function up(db: Database<any>) {
|
|
75
|
+
await db.schema
|
|
76
|
+
.createTable('${V(X(G))}')
|
|
77
|
+
.addColumn('id', 'serial', col => col.primaryKey())
|
|
78
|
+
${_(H)}
|
|
79
|
+
.addColumn('created_at', 'timestamp', col => col.notNull().defaultTo(sql.raw('CURRENT_TIMESTAMP')))
|
|
80
|
+
.addColumn('updated_at', 'timestamp')
|
|
81
|
+
.execute()
|
|
82
|
+
}
|
|
83
|
+
`}async function $(G,H){if(x()){let J=H.split(`
|
|
84
|
+
`);W.info(`[dry-run] would write ${G} (${J.length} lines)`),process.stdout.write(`${J.slice(0,60).map((q)=>` ${q}`).join(`
|
|
85
|
+
`)}
|
|
86
|
+
|
|
87
|
+
`);return}await L({path:G,data:H})}async function h(G,H){let J=v(G);if(!J)throw Error("scaffold:crud requires a non-empty resource name");let q=U(H.fields);W.info(`Scaffolding CRUD for ${I(J)} (${q.length||"no"} fields)`),await $(Z.userModelsPath(`${J}.ts`),E(J,q));let O=`${Date.now().toString()}-create-${V(X(G))}-table.ts`;await $(Z.userMigrationsPath(O),N(G,q));for(let Q of["Index","Show","Store","Update","Destroy"])await $(Z.userActionsPath(`${J}${Q}Action.ts`),D(G,Q,q));W.success(`CRUD scaffold complete: model + migration + 5 actions for ${J}`),W.info(`Next: register \`route.resource('${V(X(G))}', '${J}')\` in routes/api.ts`)}export{h as scaffoldCrud,U as parseFields};
|
package/dist/setup/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import"../chunk-cdk2r2jd.js";import{
|
|
2
|
+
import"../chunk-cdk2r2jd.js";import{Fa as a,Ga as b,Ha as c,Ia as d,Ja as e,Ka as f,La as g,Ma as h}from"../chunk-n5eqwhck.js";import"../chunk-h3d81wrg.js";export{e as trustCertificate,c as sslCertificatesExist,g as setupSSL,h as isSSLSetupComplete,a as isDomainInHosts,d as isCertificateTrusted,f as generateCertificates,b as addDomainToHosts};
|
package/dist/setup/ssl.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{
|
|
2
|
+
import{Fa as a,Ga as b,Ha as c,Ia as d,Ja as e,Ka as f,La as g,Ma as h}from"../chunk-n5eqwhck.js";import"../chunk-h3d81wrg.js";export{e as trustCertificate,c as sslCertificatesExist,g as setupSSL,h as isSSLSetupComplete,a as isDomainInHosts,d as isCertificateTrusted,f as generateCertificates,b as addDomainToHosts};
|
package/dist/stacks.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{
|
|
2
|
+
import"./chunk-h3d81wrg.js";import{log as H}from"@stacksjs/logging";import{dirname as T,join as Z,projectPath as A,relative as m,stacksBackupPath as u,stacksLockPath as b}from"@stacksjs/path";import{copyFile as K,createFolder as R,deleteFile as g,deleteEmptyFolders as d,doesFolderExist as P,fs as J}from"@stacksjs/storage";var F=["app","config","database","resources","routes","public","locales"];async function L(){let z=b();try{if(J.existsSync(z)){let q=await Bun.file(z).text();return JSON.parse(q)}}catch{}return{version:1,generatedAt:new Date().toISOString(),stacks:{}}}async function D(z){let q=b(),W=T(q);if(!J.existsSync(W))await R(W);z.generatedAt=new Date().toISOString(),await Bun.write(q,JSON.stringify(z,null,2))}function y(z){let q=A("pantry"),W=Z(q,z);if(J.existsSync(Z(W,"package.json")))return W;let X=Z(q,"@stacksjs",z);if(J.existsSync(Z(X,"package.json")))return X;if(z.startsWith("@")){let Q=Z(q,z);if(J.existsSync(Z(Q,"package.json")))return Q}let M=["*/package.json","@*/*/package.json"];for(let Q of M){let Y=new Bun.Glob(Q);for(let $ of Y.scanSync({cwd:q,absolute:!0,onlyFiles:!0}))try{if(JSON.parse(J.readFileSync($,"utf-8"))?.stacks?.name===z)return T($)}catch{}}return null}function C(z,q){let W=[];if(!J.existsSync(z))return W;let X=J.readdirSync(z,{withFileTypes:!0});for(let M of X){let Q=Z(z,M.name);if(M.isDirectory())W.push(...C(Q,q));else W.push(m(q,Q))}return W}async function n(z){let{name:q,force:W=!1,dryRun:X=!1,verbose:M=!1}=z,Q=W?"overwrite":z.conflict??"skip";H.info(`Installing stack "${q}"...`);let Y=y(q);if(!Y)return H.error(`Stack "${q}" not found in pantry. Install it first with: bun add <package-name>`),null;let $,G;try{let V=await Bun.file(Z(Y,"package.json")).text();if($=JSON.parse(V),G=$.stacks,!G?.name)return H.error(`Package at "${Y}" does not have a valid "stacks" field in package.json`),null}catch(V){return H.error(`Failed to read stack package.json: ${V}`),null}let O=await L(),U=$.name||q;if(O.stacks[U]&&!W)return H.warn(`Stack "${G.name}" is already installed. Use --force to reinstall.`),O.stacks[U];let B=G.directories??F,w=[];for(let V of B){let E=Z(Y,V);if(J.existsSync(E)){let _=C(E,Y);w.push(..._)}}if(w.length===0)return H.warn(`Stack "${G.name}" has no files to install`),null;if(M)H.info(`Found ${w.length} file(s) to install`);let x=[],I=[];for(let V of w){let E=Z(Y,V),_=A(V);if(X){if(J.existsSync(_))if(H.info(`[dry-run] Would ${Q}: ${V}`),Q==="skip")I.push(V);else x.push(V);else H.info(`[dry-run] Would copy: ${V}`),x.push(V);continue}if(J.existsSync(_))switch(Q){case"skip":if(M)H.warn(`Skipping (file exists): ${V}`);I.push(V);continue;case"backup":{let f=u(G.name),v=Z(f,V),j=T(v);if(!J.existsSync(j))await R(j);if(K(_,v),M)H.info(`Backed up: ${V}`);break}case"overwrite":if(M)H.warn(`Overwriting: ${V}`);break}let S=T(_);if(!J.existsSync(S))await R(S);if(K(E,_),x.push(V),M)H.info(`Copied: ${V}`)}if(X)return H.info(`[dry-run] Would install ${x.length} file(s), skip ${I.length} file(s)`),null;let N={packageName:U,name:G.name,version:$.version||"0.0.0",installedAt:new Date().toISOString(),files:x,skipped:I,conflictStrategy:Q};return O.stacks[U]=N,await D(O),H.success(`Installed stack "${G.name}" (${x.length} file(s) copied, ${I.length} skipped)`),N}async function c(z){let{name:q,force:W=!1,verbose:X=!1}=z;H.info(`Uninstalling stack "${q}"...`);let M=await L(),Q=null,Y=null;for(let[O,U]of Object.entries(M.stacks))if(U.name===q||O===q){Q=O,Y=U;break}if(!Y||!Q)return H.error(`Stack "${q}" is not installed`),!1;let $=0;for(let O of Y.files){let U=A(O);if(!J.existsSync(U)){if(X)H.info(`Already removed: ${O}`);continue}if(!W){let B=y(q);if(B){let w=Z(B,O);if(J.existsSync(w)){let x=await Bun.file(w).text(),I=await Bun.file(U).text();if(x!==I){H.warn(`Skipping modified file: ${O} (use --force to remove)`);continue}}}}if(await g(U),$++,X)H.info(`Removed: ${O}`)}let G=u(Y.name);if(J.existsSync(G)&&P(G)){let O=C(G,G);for(let U of O){let B=Z(G,U),w=A(U),x=T(w);if(!J.existsSync(x))await R(x);if(K(B,w),X)H.info(`Restored from backup: ${U}`)}J.rmSync(G,{recursive:!0,force:!0})}for(let O of F){let U=A(O);if(J.existsSync(U))await d(U)}return delete M.stacks[Q],await D(M),H.success(`Uninstalled stack "${Y.name}" (${$} file(s) removed)`),!0}async function i(){let z=[],q=await L(),W=A("pantry");if(J.existsSync(W)){let X=["*/package.json","@*/*/package.json"];for(let M of X){let Q=new Bun.Glob(M);for(let Y of Q.scanSync({cwd:W,absolute:!0,onlyFiles:!0}))try{let $=J.readFileSync(Y,"utf-8"),G=JSON.parse($);if(!G?.stacks?.name)continue;let O=G.name,U=!!q.stacks[O],B=q.stacks[O];z.push({name:G.stacks.name,packageName:O,version:G.version||"0.0.0",description:G.stacks.description,installed:U,installedAt:B?.installedAt,fileCount:B?.files.length})}catch{}}}for(let[X,M]of Object.entries(q.stacks))if(!z.some((Q)=>Q.packageName===X))z.push({name:M.name,packageName:X,version:M.version,installed:!0,installedAt:M.installedAt,fileCount:M.files.length});return z}export{c as uninstallStack,i as listStacks,n as installStack};
|
package/dist/templates.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{
|
|
2
|
+
import{S as a}from"./chunk-nty6mmx4.js";import"./chunk-h3d81wrg.js";export{a as CODE_TEMPLATES};
|
package/dist/types.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import"./chunk-
|
|
2
|
+
import"./chunk-h3d81wrg.js";import t from"process";import{NpmScript as e}from"@stacksjs/enums";import{log as s}from"@stacksjs/logging";import{ExitCode as i}from"@stacksjs/types";import{runNpmScript as p}from"@stacksjs/utils";async function m(r){let o=await p(e.TypesFix,r);if(o.isErr)s.error("There was an error fixing your types.",o.error),t.exit(i.FatalError);s.success("Types are set")}async function u(r){return await m(r)}export{u as types,m as invoke};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import"../chunk-
|
|
2
|
+
import"../chunk-h3d81wrg.js";var c=void 0;export{c as default};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{c as a,d as b,e as c,f as d,g as e,h as f,i as g,j as h,k as i,l as j,m as k,n as l,o as m,p as n}from"../chunk-n24m8prb.js";import"../chunk-
|
|
2
|
+
import{c as a,d as b,e as c,f as d,g as e,h as f,i as g,j as h,k as i,l as j,m as k,n as l,o as m,p as n}from"../chunk-n24m8prb.js";import"../chunk-h3d81wrg.js";export{g as writeSyncedVersion,e as writeChannel,m as snapshotTree,h as shouldShortCircuit,i as resolveUpgradeMessage,a as resolveUpgradeContext,j as resolveSuccessMessage,c as readVersion,f as readSyncedVersion,d as readChannel,n as diffSnapshots,l as detectLocalStacks,b as buildTemplateString,k as MANAGED_PATHS};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{c as R,d as x,e as w,f as S,g as u,h as y,i as h,j as p,k as g,l as d,m as D,n as l,o as H,p as m}from"../chunk-n24m8prb.js";import{
|
|
2
|
+
import{c as R,d as x,e as w,f as S,g as u,h as y,i as h,j as p,k as g,l as d,m as D,n as l,o as H,p as m}from"../chunk-n24m8prb.js";import{Lb as j}from"../chunk-h3d81wrg.js";import{copyFileSync as i,cpSync as a,existsSync as B,mkdirSync as f,readFileSync as e,rmSync as qq}from"fs";import{dirname as zq,join as U}from"path";import I from"process";import{parseOptions as Kq}from"@stacksjs/cli";import{downloadTemplate as n}from"@stacksjs/gitit";import{path as N}from"@stacksjs/path";import{ExitCode as C}from"@stacksjs/types";var Y=Kq(),O=N.projectPath();if(!B(N.projectPath("storage/framework/core"))){let{upgradeStacksPackages:q}=await import("./packages.js");await q(O,{version:Y.version,canary:Y.canary,stable:Y.stable,force:Y.force,dryRun:Y.dryRun,noPostinstall:Y.noPostinstall??Y.postinstall===!1})}var c=U(O,".stacks-channel"),s=U(O,".stacks-version"),A=S(c),$=R(Y,A),r=N.projectPath("storage/framework/core/buddy/package.json"),Qq=w(r),Wq=Y.from?N.projectPath(Y.from):null,_=Wq??l(O),E=!!_;console.log(g($,A,!!Y.stable));console.log(E?` source: local checkout at ${_}`:` source: github:stacksjs/stacks#${$.ref}`);if(!Y.force){let q=await Jq(O);if(q.length>0){console.warn(`
|
|
3
3
|
\u26A0 The following framework-managed paths have uncommitted changes:`);for(let z of q)console.warn(` - ${z}`);console.warn(`
|
|
4
4
|
Aborting to avoid clobbering your edits.`),console.warn(` Re-run with --force to overwrite, or commit / stash the changes first.
|
|
5
5
|
`),I.exit(C.FatalError)}}var G=null;if(!Y.force&&!$.targetVersion){G=await t($,E,_);let q=y(s);if(p({force:!!Y.force,targetVersion:$.targetVersion,remoteSha:G,synced:q,channel:$.channel}))console.log(`\u2714 Already on the latest ${$.channel} (${G.slice(0,7)}).`),I.exit(C.Success)}var b=N.frameworkPath("core/actions/src/upgrade/framework.ts"),k=await o(b),V={added:0,changed:0,removed:0,unchanged:0},v=[];try{for(let q of D){let z=U(O,q.localPath),K=q.isFile?await T(z):await H(z,q.skip);if(E&&_)await Bq(_,q,z);else{if(q.isFile)continue;await Iq($.ref,q,z,!!Y.force)}let Q=q.isFile?await T(z):await H(z,q.skip),W=m(K,Q);V.added+=W.added,V.changed+=W.changed,V.removed+=W.removed,V.unchanged+=W.unchanged,v.push({managed:q,summary:W})}if(!E)await Uq($.ref)}catch(q){console.error("\u2718 Failed to upgrade Stacks framework:",q?.message||q),I.exit(C.FatalError)}var Xq=w(r),P=await o(b),Yq=I.argv.includes("--__restarted");if(k!==0n&&P!==0n&&k!==P&&!Yq){console.log(`Upgrade pulled a newer version of the upgrade action \u2014 re-running once to pick up new sync paths and hooks.
|
package/dist/upgrade/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import"../chunk-s735m9mg.js";import{
|
|
2
|
+
import"../chunk-s735m9mg.js";import{Ib as r}from"../chunk-0gadhvn7.js";import"../chunk-h3d81wrg.js";import e from"process";import{parseArgs as o}from"@stacksjs/cli";import{Action as i}from"@stacksjs/enums";import{ExitCode as t}from"@stacksjs/types";var a=o();if(a?.framework||a?.all)await r(i.UpgradeFramework,a);if(a?.dependencies||a?.all)await r(i.UpgradeDeps,a);if(a?.bun||a?.all)await r(i.UpgradeBun,a);if(a?.shell||a?.all)await r(i.UpgradeShell,a);if(a?.binary||a?.all)await r(i.UpgradeBinary,a);e.exit(t.Success);
|
package/dist/upgrade/packages.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import"../chunk-
|
|
2
|
+
import"../chunk-h3d81wrg.js";import{existsSync as U,readFileSync as V,writeFileSync as W}from"fs";import{join as X}from"path";import M from"process";import{runCommand as Y}from"@stacksjs/cli";async function Z(A){let z=await fetch("https://registry.npmjs.org/stacks").catch(()=>null);if(!z||!z.ok)throw Error("Could not reach the npm registry to resolve the target `stacks` version.");let I=await z.json(),J=I["dist-tags"]??{},G=I.versions??{},q;if(A.version){if(!G[A.version])throw Error(`stacks@${A.version} was not found on the npm registry.`);q=A.version}else{let H=A.canary?"canary":"latest",b=J[H];if(!b)throw Error(`The \`${H}\` dist-tag is not published for \`stacks\`.`);q=b}let E=new Set(Object.keys(G[q]?.dependencies??{}));return{version:q,coreDeps:E}}function _(A,z,I){let J=[],G=(q)=>q==="stacks"||q.startsWith("@stacksjs/")&&I.has(q);for(let q of["dependencies","devDependencies"]){let E=A[q];if(!E)continue;for(let[H,b]of Object.entries(E)){if(!G(H))continue;let O=`${/^[\^~]/.test(b)?b[0]:/^\d/.test(b)?"":"^"}${z}`;if(b!==O)J.push({name:H,from:b,to:O}),E[H]=O}}return J}async function T(A,z){let I=X(A,"package.json");if(!U(I))console.error("No package.json found \u2014 nothing to upgrade."),M.exit(1);let J=V(I,"utf-8"),G=JSON.parse(J),q=G.dependencies?.stacks??G.devDependencies?.stacks,{version:E,coreDeps:H}=await Z(z).catch((K)=>{console.error(`\u2717 ${K.message}`),M.exit(1)});if(console.log(`
|
|
3
3
|
Upgrading the Stacks framework${z.canary?" (canary)":""} \u2192 ${E}`),q)console.log(` current \`stacks\` constraint: ${q}
|
|
4
4
|
`);let b=_(G,E,H);if(b.length===0&&!z.force)console.log(`\u2714 Already up to date \u2014 every framework dependency matches the target.
|
|
5
5
|
`),M.exit(0);if(b.length>0){console.log(" The following dependencies will be updated:");let K=Math.max(...b.map((N)=>N.name.length));for(let N of b)console.log(` ${N.name.padEnd(K)} ${N.from} \u2192 ${N.to}`);console.log("")}if(z.dryRun)console.log(` --dry-run: no files were written and nothing was installed.
|
package/dist/upgrade.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import"./chunk-
|
|
2
|
+
import"./chunk-h3d81wrg.js";import{readFileSync as K}from"fs";import A from"process";import{intro as L,outro as B,runCommand as I}from"@stacksjs/cli";import{NpmScript as M}from"@stacksjs/enums";import{log as G}from"@stacksjs/logging";import{projectPath as J}from"@stacksjs/path";import*as w from"@stacksjs/storage";import{ExitCode as H}from"@stacksjs/types";var{version:Q}=JSON.parse(K(new URL("../package.json",import.meta.url),"utf8"));function _(b){try{console.log("checkForUncommittedChanges",b)}catch(q){console.error(q)}}async function $(b){let z=J("updates");if(w.doesFolderExist(z))await w.deleteFolder(z);G.info("Downloading framework updates..."),await I("giget stacks updates",b),G.success(`Your framework updated correctly to version: v${Q}`)}async function v(){let b=await L("buddy upgrade:dependencies"),q=await I(M.UpgradeDependencies,{cwd:J()});if(q.isErr)await B("While running the upgrade:dependencies command, there was an issue",{startTime:b,useSeconds:!0},q.error),A.exit(H.FatalError);await B("Freshly updated your dependencies.",{startTime:b,useSeconds:!0}),A.exit(H.Success)}export{v as updateDependencies,$ as downloadFrameworkUpdate,_ as checkForUncommittedChanges};
|
package/package.json
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@stacksjs/actions",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"
|
|
4
|
+
"sideEffects": false,
|
|
5
|
+
"version": "0.70.86",
|
|
5
6
|
"description": "The Stacks actions.",
|
|
6
7
|
"author": "Chris Breuer",
|
|
7
8
|
"contributors": [
|
|
@@ -68,23 +69,23 @@
|
|
|
68
69
|
"@stacksjs/ts-md": "^0.1.1"
|
|
69
70
|
},
|
|
70
71
|
"devDependencies": {
|
|
71
|
-
"@stacksjs/api": "0.70.
|
|
72
|
-
"@stacksjs/cli": "0.70.
|
|
73
|
-
"@stacksjs/config": "0.70.
|
|
74
|
-
"@stacksjs/database": "0.70.
|
|
72
|
+
"@stacksjs/api": "0.70.86",
|
|
73
|
+
"@stacksjs/cli": "0.70.86",
|
|
74
|
+
"@stacksjs/config": "0.70.86",
|
|
75
|
+
"@stacksjs/database": "0.70.86",
|
|
75
76
|
"@stacksjs/tlsx": "^0.13.2",
|
|
76
77
|
"better-dx": "^0.2.16",
|
|
77
|
-
"@stacksjs/dns": "0.70.
|
|
78
|
-
"@stacksjs/enums": "0.70.
|
|
79
|
-
"@stacksjs/env": "0.70.
|
|
80
|
-
"@stacksjs/error-handling": "0.70.
|
|
81
|
-
"@stacksjs/logging": "0.70.
|
|
82
|
-
"@stacksjs/path": "0.70.
|
|
83
|
-
"@stacksjs/security": "0.70.
|
|
84
|
-
"@stacksjs/storage": "0.70.
|
|
85
|
-
"@stacksjs/strings": "0.70.
|
|
86
|
-
"@stacksjs/utils": "0.70.
|
|
87
|
-
"@stacksjs/validation": "0.70.
|
|
78
|
+
"@stacksjs/dns": "0.70.86",
|
|
79
|
+
"@stacksjs/enums": "0.70.86",
|
|
80
|
+
"@stacksjs/env": "0.70.86",
|
|
81
|
+
"@stacksjs/error-handling": "0.70.86",
|
|
82
|
+
"@stacksjs/logging": "0.70.86",
|
|
83
|
+
"@stacksjs/path": "0.70.86",
|
|
84
|
+
"@stacksjs/security": "0.70.86",
|
|
85
|
+
"@stacksjs/storage": "0.70.86",
|
|
86
|
+
"@stacksjs/strings": "0.70.86",
|
|
87
|
+
"@stacksjs/utils": "0.70.86",
|
|
88
|
+
"@stacksjs/validation": "0.70.86"
|
|
88
89
|
},
|
|
89
90
|
"peerDependencies": {
|
|
90
91
|
"pickier": "^0.1.28"
|
package/dist/chunk-0wyxyqak.js
DELETED
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
// @bun
|
|
2
|
-
import{log as H}from"@stacksjs/logging";import{dirname as T,join as Z,projectPath as A,relative as m,stacksBackupPath as u,stacksLockPath as b}from"@stacksjs/path";import{copyFile as K,createFolder as R,deleteFile as g,deleteEmptyFolders as d,doesFolderExist as P,fs as J}from"@stacksjs/storage";var F=["app","config","database","resources","routes","public","locales"];async function L(){let z=b();try{if(J.existsSync(z)){let q=await Bun.file(z).text();return JSON.parse(q)}}catch{}return{version:1,generatedAt:new Date().toISOString(),stacks:{}}}async function D(z){let q=b(),W=T(q);if(!J.existsSync(W))await R(W);z.generatedAt=new Date().toISOString(),await Bun.write(q,JSON.stringify(z,null,2))}function y(z){let q=A("pantry"),W=Z(q,z);if(J.existsSync(Z(W,"package.json")))return W;let X=Z(q,"@stacksjs",z);if(J.existsSync(Z(X,"package.json")))return X;if(z.startsWith("@")){let Q=Z(q,z);if(J.existsSync(Z(Q,"package.json")))return Q}let M=["*/package.json","@*/*/package.json"];for(let Q of M){let Y=new Bun.Glob(Q);for(let $ of Y.scanSync({cwd:q,absolute:!0,onlyFiles:!0}))try{if(JSON.parse(J.readFileSync($,"utf-8"))?.stacks?.name===z)return T($)}catch{}}return null}function C(z,q){let W=[];if(!J.existsSync(z))return W;let X=J.readdirSync(z,{withFileTypes:!0});for(let M of X){let Q=Z(z,M.name);if(M.isDirectory())W.push(...C(Q,q));else W.push(m(q,Q))}return W}async function n(z){let{name:q,force:W=!1,dryRun:X=!1,verbose:M=!1}=z,Q=W?"overwrite":z.conflict??"skip";H.info(`Installing stack "${q}"...`);let Y=y(q);if(!Y)return H.error(`Stack "${q}" not found in pantry. Install it first with: bun add <package-name>`),null;let $,G;try{let V=await Bun.file(Z(Y,"package.json")).text();if($=JSON.parse(V),G=$.stacks,!G?.name)return H.error(`Package at "${Y}" does not have a valid "stacks" field in package.json`),null}catch(V){return H.error(`Failed to read stack package.json: ${V}`),null}let O=await L(),U=$.name||q;if(O.stacks[U]&&!W)return H.warn(`Stack "${G.name}" is already installed. Use --force to reinstall.`),O.stacks[U];let B=G.directories??F,w=[];for(let V of B){let E=Z(Y,V);if(J.existsSync(E)){let _=C(E,Y);w.push(..._)}}if(w.length===0)return H.warn(`Stack "${G.name}" has no files to install`),null;if(M)H.info(`Found ${w.length} file(s) to install`);let x=[],I=[];for(let V of w){let E=Z(Y,V),_=A(V);if(X){if(J.existsSync(_))if(H.info(`[dry-run] Would ${Q}: ${V}`),Q==="skip")I.push(V);else x.push(V);else H.info(`[dry-run] Would copy: ${V}`),x.push(V);continue}if(J.existsSync(_))switch(Q){case"skip":if(M)H.warn(`Skipping (file exists): ${V}`);I.push(V);continue;case"backup":{let f=u(G.name),v=Z(f,V),j=T(v);if(!J.existsSync(j))await R(j);if(K(_,v),M)H.info(`Backed up: ${V}`);break}case"overwrite":if(M)H.warn(`Overwriting: ${V}`);break}let S=T(_);if(!J.existsSync(S))await R(S);if(K(E,_),x.push(V),M)H.info(`Copied: ${V}`)}if(X)return H.info(`[dry-run] Would install ${x.length} file(s), skip ${I.length} file(s)`),null;let N={packageName:U,name:G.name,version:$.version||"0.0.0",installedAt:new Date().toISOString(),files:x,skipped:I,conflictStrategy:Q};return O.stacks[U]=N,await D(O),H.success(`Installed stack "${G.name}" (${x.length} file(s) copied, ${I.length} skipped)`),N}async function c(z){let{name:q,force:W=!1,verbose:X=!1}=z;H.info(`Uninstalling stack "${q}"...`);let M=await L(),Q=null,Y=null;for(let[O,U]of Object.entries(M.stacks))if(U.name===q||O===q){Q=O,Y=U;break}if(!Y||!Q)return H.error(`Stack "${q}" is not installed`),!1;let $=0;for(let O of Y.files){let U=A(O);if(!J.existsSync(U)){if(X)H.info(`Already removed: ${O}`);continue}if(!W){let B=y(q);if(B){let w=Z(B,O);if(J.existsSync(w)){let x=await Bun.file(w).text(),I=await Bun.file(U).text();if(x!==I){H.warn(`Skipping modified file: ${O} (use --force to remove)`);continue}}}}if(await g(U),$++,X)H.info(`Removed: ${O}`)}let G=u(Y.name);if(J.existsSync(G)&&P(G)){let O=C(G,G);for(let U of O){let B=Z(G,U),w=A(U),x=T(w);if(!J.existsSync(x))await R(x);if(K(B,w),X)H.info(`Restored from backup: ${U}`)}J.rmSync(G,{recursive:!0,force:!0})}for(let O of F){let U=A(O);if(J.existsSync(U))await d(U)}return delete M.stacks[Q],await D(M),H.success(`Uninstalled stack "${Y.name}" (${$} file(s) removed)`),!0}async function i(){let z=[],q=await L(),W=A("pantry");if(J.existsSync(W)){let X=["*/package.json","@*/*/package.json"];for(let M of X){let Q=new Bun.Glob(M);for(let Y of Q.scanSync({cwd:W,absolute:!0,onlyFiles:!0}))try{let $=J.readFileSync(Y,"utf-8"),G=JSON.parse($);if(!G?.stacks?.name)continue;let O=G.name,U=!!q.stacks[O],B=q.stacks[O];z.push({name:G.stacks.name,packageName:O,version:G.version||"0.0.0",description:G.stacks.description,installed:U,installedAt:B?.installedAt,fileCount:B?.files.length})}catch{}}}for(let[X,M]of Object.entries(q.stacks))if(!z.some((Q)=>Q.packageName===X))z.push({name:M.name,packageName:X,version:M.version,installed:!0,installedAt:M.installedAt,fileCount:M.files.length});return z}
|
|
3
|
-
export{n as q,c as r,i as s};
|