create-monolayer-app 0.5.1 → 0.6.3

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.
Files changed (87) hide show
  1. package/bin/index.js +91 -59
  2. package/package.json +19 -16
  3. package/template/.agents/skills/{monolayer-application-permissions → application-permissions}/SKILL.md +2 -2
  4. package/template/.agents/skills/application-permissions/agents/openai.yaml +4 -0
  5. package/template/.agents/skills/kysely/SKILL.md +48 -0
  6. package/template/.agents/skills/kysely/agents/openai.yaml +4 -0
  7. package/template/.agents/skills/kysely/references/execution-plugins-and-runtime.md +67 -0
  8. package/template/.agents/skills/kysely/references/expressions-and-helpers.md +102 -0
  9. package/template/.agents/skills/kysely/references/migrations.md +43 -0
  10. package/template/.agents/skills/kysely/references/official-docs-map.md +97 -0
  11. package/template/.agents/skills/kysely/references/query-building.md +119 -0
  12. package/template/.agents/skills/kysely/references/transactions.md +47 -0
  13. package/template/.agents/skills/kysely/references/troubleshooting-and-boundaries.md +67 -0
  14. package/template/.agents/skills/kysely/references/types.md +58 -0
  15. package/template/.agents/skills/persistent-app-data/SKILL.md +74 -0
  16. package/template/.agents/skills/persistent-app-data/agents/openai.yaml +4 -0
  17. package/template/.agents/skills/persistent-app-data/references/generated-types.md +23 -0
  18. package/template/.agents/skills/persistent-app-data/references/migrations.md +68 -0
  19. package/template/.agents/skills/vitest/GENERATION.md +25 -0
  20. package/template/.agents/skills/vitest/SKILL.md +59 -0
  21. package/template/.agents/skills/vitest/references/advanced-environments.md +26 -0
  22. package/template/.agents/skills/vitest/references/advanced-projects.md +31 -0
  23. package/template/.agents/skills/vitest/references/advanced-type-testing.md +30 -0
  24. package/template/.agents/skills/vitest/references/advanced-vi.md +23 -0
  25. package/template/.agents/skills/vitest/references/core-cli.md +23 -0
  26. package/template/.agents/skills/vitest/references/core-config.md +24 -0
  27. package/template/.agents/skills/vitest/references/core-describe.md +24 -0
  28. package/template/.agents/skills/vitest/references/core-expect.md +35 -0
  29. package/template/.agents/skills/vitest/references/core-hooks.md +26 -0
  30. package/template/.agents/skills/vitest/references/core-test-api.md +29 -0
  31. package/template/.agents/skills/vitest/references/features-benchmarking.md +25 -0
  32. package/template/.agents/skills/vitest/references/features-concurrency.md +20 -0
  33. package/template/.agents/skills/vitest/references/features-context.md +27 -0
  34. package/template/.agents/skills/vitest/references/features-coverage.md +17 -0
  35. package/template/.agents/skills/vitest/references/features-filtering.md +24 -0
  36. package/template/.agents/skills/vitest/references/features-mocking.md +32 -0
  37. package/template/.agents/skills/vitest/references/features-reporters.md +22 -0
  38. package/template/.agents/skills/vitest/references/features-snapshots.md +23 -0
  39. package/template/.agents/skills/vitest/references/features-test-tags.md +30 -0
  40. package/template/.agents/skills/vitest/references/version-compatibility.md +19 -0
  41. package/template/.claude/CLAUDE.md +2 -2
  42. package/template/.react-router/types/+routes.ts +41 -0
  43. package/template/.react-router/types/+server-build.d.ts +18 -0
  44. package/template/.react-router/types/app/+types/root.ts +68 -0
  45. package/template/.react-router/types/app/routes/+types/files.ts +71 -0
  46. package/template/.react-router/types/app/routes/+types/home.ts +71 -0
  47. package/template/AGENTS.md +6 -2
  48. package/template/README.md +10 -0
  49. package/template/app/routes/files.ts +3 -3
  50. package/template/build/client/assets/entry.client-Bc58m2-m.js +9 -0
  51. package/template/build/client/assets/errorBoundaries-CQxPIuVU.js +16 -0
  52. package/template/build/client/assets/files-BvRk9kiK.js +0 -0
  53. package/template/build/client/assets/home-CH2INc5e.js +1 -0
  54. package/template/build/client/assets/jsx-runtime-eLCqVKHJ.js +1 -0
  55. package/template/build/client/assets/logo-dark-pX2395Y0.svg +23 -0
  56. package/template/build/client/assets/logo-light-CVbx2LBR.svg +23 -0
  57. package/template/build/client/assets/manifest-2d65dd0f.js +1 -0
  58. package/template/build/client/assets/root-BeNS6njP.css +2 -0
  59. package/template/build/client/assets/root-C1tmjS9o.js +1 -0
  60. package/template/build/client/favicon.ico +0 -0
  61. package/template/build/server/index.js +1096 -0
  62. package/template/lib/db/client.ts +1 -27
  63. package/template/package-lock.json +8221 -0
  64. package/template/package.json +7 -3
  65. package/template/vendor/file-bucket/{client.ts → index.client.ts} +11 -9
  66. package/template/vendor/file-bucket/{server.ts → index.server.ts} +13 -8
  67. package/template/vendor/file-bucket/{index.ts → lib/file-bucket.ts} +2 -1
  68. package/template/vendor/file-bucket/{react-router.ts → react-router.server.ts} +15 -13
  69. package/template/vendor/kysely-dsql/dsql/dsql-kysely.ts +31 -3
  70. package/template/vendor/kysely-dsql/generator/migration-file.ts +3 -3
  71. package/template/vendor/kysely-dsql/plugins/index.ts +0 -2
  72. package/template/vendor/package-app/package-app.mjs +10 -3
  73. package/template/vendor/package-app/package-app.test.mjs +167 -0
  74. package/template/vite.config.ts +3 -1
  75. package/template/vitest.config.ts +7 -2
  76. package/template/.agents/skills/monolayer-application-permissions/agents/openai.yaml +0 -4
  77. package/template/vendor/kysely-dsql/plugins/soft-delete.plugin.ts +0 -217
  78. /package/template/.agents/skills/{monolayer-application-permissions → application-permissions}/references/development-and-verification.md +0 -0
  79. /package/template/.agents/skills/{monolayer-application-permissions → application-permissions}/references/interface-examples.md +0 -0
  80. /package/template/.agents/skills/{monolayer-application-permissions → application-permissions}/references/server-examples.md +0 -0
  81. /package/template/vendor/file-bucket/{errors.ts → lib/errors.server.ts} +0 -0
  82. /package/template/vendor/file-bucket/{multipart.ts → lib/multipart.ts} +0 -0
  83. /package/template/vendor/file-bucket/{protocol.ts → lib/protocol.ts} +0 -0
  84. /package/template/vendor/file-bucket/{transport.ts → lib/transport.client.ts} +0 -0
  85. /package/template/vendor/file-bucket/{types.ts → lib/types.ts} +0 -0
  86. /package/template/vendor/file-bucket/{transfers.ts → lib/upload-signed-url.ts} +0 -0
  87. /package/template/vendor/file-bucket/{xml.ts → lib/xml.ts} +0 -0
@@ -1,217 +0,0 @@
1
- // oxlint-disable max-classes-per-file
2
- // source: https://github.com/LouisJULIEN/kysely-plugins/blob/main/src/soft-delete/soft-delete.plugin.ts
3
- import type {
4
- KyselyPlugin,
5
- OperationNode,
6
- PluginTransformQueryArgs,
7
- PluginTransformResultArgs,
8
- QueryResult,
9
- RootOperationNode,
10
- SelectQueryNode,
11
- UnknownRow,
12
- UpdateQueryNode,
13
- } from "kysely";
14
- import {
15
- AliasNode,
16
- BinaryOperationNode,
17
- ColumnNode,
18
- IdentifierNode,
19
- JoinNode,
20
- OperationNodeTransformer,
21
- OperatorNode,
22
- RawNode,
23
- ReferenceNode,
24
- TableNode,
25
- WhereNode,
26
- } from "kysely";
27
-
28
- // credits: https://github.com/kysely-org/kysely/issues/803
29
-
30
- export class SoftDeleteError extends Error {
31
- readonly node?: OperationNode | undefined;
32
-
33
- constructor(
34
- message: string,
35
- node?: OperationNode | undefined
36
- // oxlint-disable-next-line unicorn/custom-error-definition
37
- ) {
38
- super(message);
39
- this.node = node;
40
- }
41
- }
42
- class SoftDeleteQueryTransformer extends OperationNodeTransformer {
43
- private deletedAtColumnName: string;
44
- private ignoredTables: string[];
45
-
46
- constructor({
47
- deletedAtColumnName,
48
- ignoredTables,
49
- }: {
50
- deletedAtColumnName?: string;
51
- ignoredTables?: string[];
52
- } = {}) {
53
- super();
54
- this.deletedAtColumnName = deletedAtColumnName || "deleted_at";
55
- this.ignoredTables = ignoredTables || [];
56
- }
57
-
58
- protected override transformSelectQuery(
59
- originalNode: SelectQueryNode
60
- ): SelectQueryNode {
61
- const node = super.transformSelectQuery(originalNode);
62
- return this.addDeletedAtCondition(node);
63
- }
64
-
65
- protected override transformUpdateQuery(
66
- originalNode: UpdateQueryNode
67
- ): UpdateQueryNode {
68
- const node = super.transformUpdateQuery(originalNode);
69
- return this.addDeletedAtCondition(node);
70
- }
71
-
72
- private appendFromFilters(
73
- where: WhereNode | undefined,
74
- node: SelectQueryNode | UpdateQueryNode
75
- ): WhereNode | undefined {
76
- let currentWhere = where;
77
- if (node.from) {
78
- for (const from of node.from.froms) {
79
- const deletedAtReference = this.getDeletedAtReference(from);
80
- if (deletedAtReference) {
81
- currentWhere = this.addIsNotDeletedFilter(
82
- currentWhere,
83
- deletedAtReference
84
- );
85
- }
86
- }
87
- }
88
- return currentWhere;
89
- }
90
-
91
- private appendJoinFilters(
92
- where: WhereNode | undefined,
93
- node: SelectQueryNode | UpdateQueryNode
94
- ): WhereNode | undefined {
95
- let currentWhere = where;
96
- if (node.joins) {
97
- for (const join of node.joins) {
98
- const deletedAtReference = this.getDeletedAtReference(join);
99
- if (deletedAtReference) {
100
- currentWhere = this.addIsNotDeletedFilter(
101
- currentWhere,
102
- deletedAtReference
103
- );
104
- }
105
- }
106
- }
107
- return currentWhere;
108
- }
109
-
110
- private addDeletedAtCondition<T extends SelectQueryNode | UpdateQueryNode>(
111
- node: T
112
- ): T {
113
- let where = this.appendFromFilters(node.where, node);
114
- where = this.appendJoinFilters(where, node);
115
- return {
116
- ...node,
117
- where,
118
- };
119
- }
120
-
121
- private getJoinReference(node: JoinNode): ReferenceNode | null {
122
- if (node.table === null) {
123
- throw new SoftDeleteError("Join without a table");
124
- }
125
- return this.getDeletedAtReference(node.table);
126
- }
127
-
128
- private getAliasReference(
129
- node: AliasNode,
130
- deletedAtColumn: ColumnNode
131
- ): ReferenceNode | null {
132
- if (!IdentifierNode.is(node.alias)) {
133
- throw new SoftDeleteError("Alias without identifier", node.alias);
134
- }
135
-
136
- const tableAlias = node.alias.name;
137
- if (!this.tableShouldHaveDeletedAt(tableAlias)) {
138
- return null;
139
- }
140
- return ReferenceNode.create(deletedAtColumn, TableNode.create(tableAlias));
141
- }
142
-
143
- private getTableReference(
144
- node: TableNode,
145
- deletedAtColumn: ColumnNode
146
- ): ReferenceNode | null {
147
- const tableName = node.table.identifier.name;
148
- if (!this.tableShouldHaveDeletedAt(tableName)) {
149
- return null;
150
- }
151
- return ReferenceNode.create(deletedAtColumn, node);
152
- }
153
-
154
- private getDeletedAtReference(node: OperationNode): ReferenceNode | null {
155
- if (JoinNode.is(node)) {
156
- return this.getJoinReference(node);
157
- }
158
-
159
- const deletedAtColumn = ColumnNode.create(this.deletedAtColumnName);
160
- if (TableNode.is(node)) {
161
- return this.getTableReference(node, deletedAtColumn);
162
- }
163
- if (AliasNode.is(node)) {
164
- return this.getAliasReference(node, deletedAtColumn);
165
- }
166
-
167
- throw new SoftDeleteError(
168
- `Getting a reference to ${this.deletedAtColumnName} column for ${node.kind} is not supported yet.`,
169
- node
170
- );
171
- }
172
-
173
- // oxlint-disable-next-line class-methods-use-this
174
- private addIsNotDeletedFilter(
175
- node: WhereNode | undefined,
176
- deletedAtReference: ReferenceNode
177
- ): WhereNode {
178
- const filterOperation = BinaryOperationNode.create(
179
- deletedAtReference,
180
- OperatorNode.create("is"),
181
- RawNode.createWithSql("null")
182
- );
183
- if (node === null || node === undefined) {
184
- return WhereNode.create(filterOperation);
185
- }
186
-
187
- return WhereNode.cloneWithOperation(node, "And", filterOperation);
188
- }
189
-
190
- private tableShouldHaveDeletedAt(tableName: string): boolean {
191
- return (
192
- !tableName.startsWith("kysely_") &&
193
- !this.ignoredTables.includes(tableName)
194
- );
195
- }
196
- }
197
-
198
- export class SoftDelete implements KyselyPlugin {
199
- private transformer: SoftDeleteQueryTransformer;
200
-
201
- constructor(
202
- ...args: ConstructorParameters<typeof SoftDeleteQueryTransformer>
203
- ) {
204
- this.transformer = new SoftDeleteQueryTransformer(...args);
205
- }
206
-
207
- transformQuery({ node }: PluginTransformQueryArgs): RootOperationNode {
208
- return this.transformer.transformNode(node);
209
- }
210
-
211
- // oxlint-disable-next-line class-methods-use-this
212
- transformResult({
213
- result,
214
- }: PluginTransformResultArgs): Promise<QueryResult<UnknownRow>> {
215
- return Promise.resolve(result);
216
- }
217
- }