@tulipes/core 0.1.9 → 0.1.10
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/cli/init.js +521 -8
- package/dist/cli/init.js.map +1 -1
- package/dist/cli/new-module.d.ts +7 -3
- package/dist/cli/new-module.js +214 -41
- package/dist/cli/new-module.js.map +1 -1
- package/package.json +1 -1
- package/templates/CLAUDE.md +6 -4
- package/templates/claude/skills/tulipes-boot-errors/SKILL.md +1 -1
- package/templates/claude/skills/tulipes-model/SKILL.md +11 -3
- package/templates/claude/skills/tulipes-module/SKILL.md +11 -7
package/dist/cli/init.js
CHANGED
|
@@ -802,8 +802,11 @@ function renderProject(name, coreVersion) {
|
|
|
802
802
|
version: "0.0.0",
|
|
803
803
|
private: true,
|
|
804
804
|
type: "module",
|
|
805
|
+
// Importable by other modules as "@app/core": helpers more than one
|
|
806
|
+
// module needs live here rather than in a top-level lib/.
|
|
807
|
+
exports: { ".": "./index.ts" },
|
|
805
808
|
tulipes: { tier: "sys", priority: 0 },
|
|
806
|
-
dependencies: { "@tulipes/core": core },
|
|
809
|
+
dependencies: { "@tulipes/core": core, ioredis: "^5", mongoose: "^8" },
|
|
807
810
|
})],
|
|
808
811
|
["modules/core/meta.variables.json", json({
|
|
809
812
|
variables: [
|
|
@@ -839,6 +842,503 @@ function renderProject(name, coreVersion) {
|
|
|
839
842
|
},
|
|
840
843
|
],
|
|
841
844
|
})],
|
|
845
|
+
["modules/core/helpers/cache/types.ts", [
|
|
846
|
+
`/**`,
|
|
847
|
+
` * Storage-agnostic cache contract. Implementations serialize values`,
|
|
848
|
+
` * themselves; callers work with plain objects. Keep it small — add methods`,
|
|
849
|
+
` * only when a real use case needs them.`,
|
|
850
|
+
` */`,
|
|
851
|
+
`export interface Cache {`,
|
|
852
|
+
` /** Returns the cached value, or \`null\` if absent/expired. */`,
|
|
853
|
+
` get<T>(key: string): Promise<T | null>;`,
|
|
854
|
+
` /** Stores a value, optionally expiring after \`ttlSeconds\`. */`,
|
|
855
|
+
` set<T>(key: string, value: T, ttlSeconds?: number): Promise<void>;`,
|
|
856
|
+
` /** Removes a key (no-op if absent). */`,
|
|
857
|
+
` del(key: string): Promise<void>;`,
|
|
858
|
+
` /**`,
|
|
859
|
+
` * Returns the cached value, or computes it with \`producer\`, caches it for`,
|
|
860
|
+
` * \`ttlSeconds\`, and returns it (read-through).`,
|
|
861
|
+
` */`,
|
|
862
|
+
` wrap<T>(key: string, ttlSeconds: number, producer: () => Promise<T>): Promise<T>;`,
|
|
863
|
+
`}`,
|
|
864
|
+
``,
|
|
865
|
+
`/**`,
|
|
866
|
+
` * Shared read-through logic so drivers only implement storage. A driver that`,
|
|
867
|
+
` * can do it atomically (e.g. redis with locks) is free to override.`,
|
|
868
|
+
` */`,
|
|
869
|
+
`export abstract class BaseCache implements Cache {`,
|
|
870
|
+
` abstract get<T>(key: string): Promise<T | null>;`,
|
|
871
|
+
` abstract set<T>(key: string, value: T, ttlSeconds?: number): Promise<void>;`,
|
|
872
|
+
` abstract del(key: string): Promise<void>;`,
|
|
873
|
+
``,
|
|
874
|
+
` async wrap<T>(key: string, ttlSeconds: number, producer: () => Promise<T>): Promise<T> {`,
|
|
875
|
+
` const cached = await this.get<T>(key);`,
|
|
876
|
+
` if (cached !== null) return cached;`,
|
|
877
|
+
``,
|
|
878
|
+
` const fresh = await producer();`,
|
|
879
|
+
` await this.set(key, fresh, ttlSeconds);`,
|
|
880
|
+
` return fresh;`,
|
|
881
|
+
` }`,
|
|
882
|
+
`}`,
|
|
883
|
+
``,
|
|
884
|
+
].join("\n")],
|
|
885
|
+
["modules/core/helpers/cache/memory-cache.ts", [
|
|
886
|
+
`import { BaseCache } from "./types.js";`,
|
|
887
|
+
``,
|
|
888
|
+
`interface Entry {`,
|
|
889
|
+
` value: unknown;`,
|
|
890
|
+
` /** Epoch ms when this entry expires, or \`null\` for no expiry. */`,
|
|
891
|
+
` expiresAt: number | null;`,
|
|
892
|
+
`}`,
|
|
893
|
+
``,
|
|
894
|
+
`/**`,
|
|
895
|
+
` * In-process cache backed by a \`Map\`. For tests and local runs without`,
|
|
896
|
+
` * Redis — not shared across processes (each worker has its own store).`,
|
|
897
|
+
` *`,
|
|
898
|
+
` * Bounded: past \`maxEntries\` the least-recently-used key is evicted. LRU`,
|
|
899
|
+
` * order rides on Map insertion order — hits re-insert their key at the tail.`,
|
|
900
|
+
` */`,
|
|
901
|
+
`export class MemoryCache extends BaseCache {`,
|
|
902
|
+
` readonly #store = new Map<string, Entry>();`,
|
|
903
|
+
` readonly #maxEntries: number;`,
|
|
904
|
+
``,
|
|
905
|
+
` constructor(maxEntries = 10_000) {`,
|
|
906
|
+
` super();`,
|
|
907
|
+
` this.#maxEntries = maxEntries;`,
|
|
908
|
+
` }`,
|
|
909
|
+
``,
|
|
910
|
+
` async get<T>(key: string): Promise<T | null> {`,
|
|
911
|
+
` const entry = this.#store.get(key);`,
|
|
912
|
+
` if (!entry) return null;`,
|
|
913
|
+
` if (entry.expiresAt !== null && entry.expiresAt <= Date.now()) {`,
|
|
914
|
+
` this.#store.delete(key);`,
|
|
915
|
+
` return null;`,
|
|
916
|
+
` }`,
|
|
917
|
+
` // Refresh recency: delete + re-set moves the key to the Map's tail.`,
|
|
918
|
+
` this.#store.delete(key);`,
|
|
919
|
+
` this.#store.set(key, entry);`,
|
|
920
|
+
` return entry.value as T;`,
|
|
921
|
+
` }`,
|
|
922
|
+
``,
|
|
923
|
+
` async set<T>(key: string, value: T, ttlSeconds?: number): Promise<void> {`,
|
|
924
|
+
` const expiresAt =`,
|
|
925
|
+
` ttlSeconds && ttlSeconds > 0 ? Date.now() + ttlSeconds * 1000 : null;`,
|
|
926
|
+
` this.#store.delete(key);`,
|
|
927
|
+
` this.#store.set(key, { value, expiresAt });`,
|
|
928
|
+
``,
|
|
929
|
+
` while (this.#store.size > this.#maxEntries) {`,
|
|
930
|
+
` // Oldest key = head of the Map's insertion order.`,
|
|
931
|
+
` this.#store.delete(this.#store.keys().next().value!);`,
|
|
932
|
+
` }`,
|
|
933
|
+
` }`,
|
|
934
|
+
``,
|
|
935
|
+
` async del(key: string): Promise<void> {`,
|
|
936
|
+
` this.#store.delete(key);`,
|
|
937
|
+
` }`,
|
|
938
|
+
`}`,
|
|
939
|
+
``,
|
|
940
|
+
].join("\n")],
|
|
941
|
+
["modules/core/helpers/cache/redis-cache.ts", [
|
|
942
|
+
`import type { Redis } from "ioredis";`,
|
|
943
|
+
`import { BaseCache } from "./types.js";`,
|
|
944
|
+
``,
|
|
945
|
+
`/**`,
|
|
946
|
+
` * Redis-backed cache. Values are JSON-serialized; keys are namespaced by`,
|
|
947
|
+
` * \`prefix\` so cache keys never collide with other Redis users in the same`,
|
|
948
|
+
` * db (BullMQ especially) and can be cleared without a FLUSHDB.`,
|
|
949
|
+
` */`,
|
|
950
|
+
`export class RedisCache extends BaseCache {`,
|
|
951
|
+
` readonly #redis: Redis;`,
|
|
952
|
+
` readonly #prefix: string;`,
|
|
953
|
+
``,
|
|
954
|
+
` constructor(redis: Redis, prefix = "cache:") {`,
|
|
955
|
+
` super();`,
|
|
956
|
+
` this.#redis = redis;`,
|
|
957
|
+
` this.#prefix = prefix;`,
|
|
958
|
+
` }`,
|
|
959
|
+
``,
|
|
960
|
+
` #key(key: string): string {`,
|
|
961
|
+
` return \`\${this.#prefix}\${key}\`;`,
|
|
962
|
+
` }`,
|
|
963
|
+
``,
|
|
964
|
+
` async get<T>(key: string): Promise<T | null> {`,
|
|
965
|
+
` const raw = await this.#redis.get(this.#key(key));`,
|
|
966
|
+
` return raw === null ? null : (JSON.parse(raw) as T);`,
|
|
967
|
+
` }`,
|
|
968
|
+
``,
|
|
969
|
+
` async set<T>(key: string, value: T, ttlSeconds?: number): Promise<void> {`,
|
|
970
|
+
` const raw = JSON.stringify(value);`,
|
|
971
|
+
` if (ttlSeconds && ttlSeconds > 0) {`,
|
|
972
|
+
` await this.#redis.set(this.#key(key), raw, "EX", ttlSeconds);`,
|
|
973
|
+
` } else {`,
|
|
974
|
+
` await this.#redis.set(this.#key(key), raw);`,
|
|
975
|
+
` }`,
|
|
976
|
+
` }`,
|
|
977
|
+
``,
|
|
978
|
+
` async del(key: string): Promise<void> {`,
|
|
979
|
+
` await this.#redis.del(this.#key(key));`,
|
|
980
|
+
` }`,
|
|
981
|
+
`}`,
|
|
982
|
+
``,
|
|
983
|
+
].join("\n")],
|
|
984
|
+
["modules/core/helpers/cache/index.ts", [
|
|
985
|
+
`import { Redis } from "ioredis";`,
|
|
986
|
+
`import type { Environment } from "@tulipes/core/env";`,
|
|
987
|
+
``,
|
|
988
|
+
`import { MemoryCache } from "./memory-cache.js";`,
|
|
989
|
+
`import { RedisCache } from "./redis-cache.js";`,
|
|
990
|
+
`import type { Cache } from "./types.js";`,
|
|
991
|
+
``,
|
|
992
|
+
`export type { Cache } from "./types.js";`,
|
|
993
|
+
`export { BaseCache } from "./types.js";`,
|
|
994
|
+
`export { MemoryCache } from "./memory-cache.js";`,
|
|
995
|
+
`export { RedisCache } from "./redis-cache.js";`,
|
|
996
|
+
``,
|
|
997
|
+
`let active: { cache: Cache; redis?: Redis } | undefined;`,
|
|
998
|
+
``,
|
|
999
|
+
`/**`,
|
|
1000
|
+
` * The app's one cache, picked from the environment: redis when REDIS_URL is`,
|
|
1001
|
+
` * declared, in-process memory otherwise (tests, minimal setups). Lazily`,
|
|
1002
|
+
` * created, process-wide singleton.`,
|
|
1003
|
+
` */`,
|
|
1004
|
+
`export function appCache(environment: Environment): Cache {`,
|
|
1005
|
+
` if (active) return active.cache;`,
|
|
1006
|
+
``,
|
|
1007
|
+
` if (environment.store.has("REDIS_URL")) {`,
|
|
1008
|
+
` const redis = new Redis(String(environment.get("REDIS_URL")));`,
|
|
1009
|
+
` active = { cache: new RedisCache(redis), redis };`,
|
|
1010
|
+
` } else {`,
|
|
1011
|
+
` active = { cache: new MemoryCache() };`,
|
|
1012
|
+
` }`,
|
|
1013
|
+
` return active.cache;`,
|
|
1014
|
+
`}`,
|
|
1015
|
+
``,
|
|
1016
|
+
`/** Call from a module's onShutdown — the redis driver holds a connection. */`,
|
|
1017
|
+
`export async function closeCache(): Promise<void> {`,
|
|
1018
|
+
` await active?.redis?.quit();`,
|
|
1019
|
+
` active = undefined;`,
|
|
1020
|
+
`}`,
|
|
1021
|
+
``,
|
|
1022
|
+
].join("\n")],
|
|
1023
|
+
["modules/core/helpers/mongoose/plugins/types.ts", [
|
|
1024
|
+
`import type { Document, ObjectId, Types } from "mongoose";`,
|
|
1025
|
+
``,
|
|
1026
|
+
`/**`,
|
|
1027
|
+
` * Who performed a soft delete — a polymorphic reference. \`model\` is the`,
|
|
1028
|
+
` * actor's Mongoose model name (e.g. "User") and \`id\` its \`_id\`; together`,
|
|
1029
|
+
` * they let \`.populate("deleted_by.id")\` resolve the actor via \`refPath\`.`,
|
|
1030
|
+
` */`,
|
|
1031
|
+
`export interface Actor {`,
|
|
1032
|
+
` model: string;`,
|
|
1033
|
+
` id: Types.ObjectId;`,
|
|
1034
|
+
`}`,
|
|
1035
|
+
``,
|
|
1036
|
+
`/** Timestamp fields added by \`timestampsPlugin\`. */`,
|
|
1037
|
+
`export interface Timestamps {`,
|
|
1038
|
+
` created_at: Date;`,
|
|
1039
|
+
` updated_at: Date;`,
|
|
1040
|
+
`}`,
|
|
1041
|
+
``,
|
|
1042
|
+
`/** Fields added by \`softDeletePlugin\`. */`,
|
|
1043
|
+
`export interface SoftDeleteFields {`,
|
|
1044
|
+
` is_deleted: boolean;`,
|
|
1045
|
+
` deleted_at: Date | null;`,
|
|
1046
|
+
` deleted_by: Actor | null;`,
|
|
1047
|
+
`}`,
|
|
1048
|
+
``,
|
|
1049
|
+
`/** Instance methods added by \`softDeletePlugin\`. */`,
|
|
1050
|
+
`export interface SoftDeleteMethods {`,
|
|
1051
|
+
` /** Flag this document as deleted (optionally recording the actor) and save. */`,
|
|
1052
|
+
` softDelete(by?: Actor): Promise<this>;`,
|
|
1053
|
+
` /** Clear the soft-delete flags and save. */`,
|
|
1054
|
+
` restore(): Promise<this>;`,
|
|
1055
|
+
`}`,
|
|
1056
|
+
``,
|
|
1057
|
+
`/**`,
|
|
1058
|
+
` * Everything the base plugin contributes to a document. Model interfaces`,
|
|
1059
|
+
` * extend this to inherit the fields and methods, typed. The \`_id\` type`,
|
|
1060
|
+
` * defaults to \`ObjectId\` but can be overridden:`,
|
|
1061
|
+
` *`,
|
|
1062
|
+
` * export interface IUser extends BaseDocument { name: string }`,
|
|
1063
|
+
` * export interface IApiKey extends BaseDocument<string> { name: string }`,
|
|
1064
|
+
` */`,
|
|
1065
|
+
`export type BaseDocument<T = ObjectId> = Document<T> &`,
|
|
1066
|
+
` Timestamps &`,
|
|
1067
|
+
` SoftDeleteFields &`,
|
|
1068
|
+
` SoftDeleteMethods;`,
|
|
1069
|
+
``,
|
|
1070
|
+
].join("\n")],
|
|
1071
|
+
["modules/core/helpers/mongoose/plugins/timestamps.plugin.ts", [
|
|
1072
|
+
`import type { Schema } from "mongoose";`,
|
|
1073
|
+
``,
|
|
1074
|
+
`/**`,
|
|
1075
|
+
` * Mongoose-managed \`created_at\` / \`updated_at\` (snake_case, matching the`,
|
|
1076
|
+
` * API's wire format). Mongoose populates them on create/update — no manual`,
|
|
1077
|
+
` * defaults or hooks needed.`,
|
|
1078
|
+
` */`,
|
|
1079
|
+
`export function timestampsPlugin(schema: Schema): void {`,
|
|
1080
|
+
` schema.set("timestamps", {`,
|
|
1081
|
+
` createdAt: "created_at",`,
|
|
1082
|
+
` updatedAt: "updated_at",`,
|
|
1083
|
+
` });`,
|
|
1084
|
+
`}`,
|
|
1085
|
+
``,
|
|
1086
|
+
].join("\n")],
|
|
1087
|
+
["modules/core/helpers/mongoose/plugins/soft-delete.plugin.ts", [
|
|
1088
|
+
`import {`,
|
|
1089
|
+
` Schema,`,
|
|
1090
|
+
` type Aggregate,`,
|
|
1091
|
+
` type HydratedDocument,`,
|
|
1092
|
+
` type Model,`,
|
|
1093
|
+
` type Query,`,
|
|
1094
|
+
`} from "mongoose";`,
|
|
1095
|
+
``,
|
|
1096
|
+
`import type { Actor, SoftDeleteFields } from "./types.js";`,
|
|
1097
|
+
``,
|
|
1098
|
+
`/** Option carried on a query/aggregation to opt out of the soft-delete filter. */`,
|
|
1099
|
+
`interface SoftDeleteOptions {`,
|
|
1100
|
+
` withDeleted?: boolean;`,
|
|
1101
|
+
`}`,
|
|
1102
|
+
``,
|
|
1103
|
+
`const deletedPatch = (by?: Actor) => ({`,
|
|
1104
|
+
` is_deleted: true,`,
|
|
1105
|
+
` deleted_at: new Date(),`,
|
|
1106
|
+
` deleted_by: by ?? null,`,
|
|
1107
|
+
`});`,
|
|
1108
|
+
``,
|
|
1109
|
+
`const restoredPatch = () => ({`,
|
|
1110
|
+
` is_deleted: false,`,
|
|
1111
|
+
` deleted_at: null,`,
|
|
1112
|
+
` deleted_by: null,`,
|
|
1113
|
+
`});`,
|
|
1114
|
+
``,
|
|
1115
|
+
`/**`,
|
|
1116
|
+
` * Hides soft-deleted documents from reads and updates. Skipped when the`,
|
|
1117
|
+
` * caller opted out via \`.withDeleted()\` or already targeted \`is_deleted\``,
|
|
1118
|
+
` * explicitly. Uses \`$ne: true\` (not \`=== false\`) so legacy documents`,
|
|
1119
|
+
` * missing the field are still treated as live.`,
|
|
1120
|
+
` */`,
|
|
1121
|
+
`function excludeDeleted(this: Query<unknown, unknown>) {`,
|
|
1122
|
+
` const { withDeleted } = this.getOptions() as SoftDeleteOptions;`,
|
|
1123
|
+
` if (withDeleted) return;`,
|
|
1124
|
+
` if (this.getFilter().is_deleted !== undefined) return;`,
|
|
1125
|
+
` this.where({ is_deleted: { $ne: true } });`,
|
|
1126
|
+
`}`,
|
|
1127
|
+
``,
|
|
1128
|
+
`/** The aggregation-pipeline equivalent of {@link excludeDeleted}. */`,
|
|
1129
|
+
`function excludeDeletedFromAggregate(this: Aggregate<unknown[]>) {`,
|
|
1130
|
+
` const { withDeleted } = (this.options ?? {}) as SoftDeleteOptions;`,
|
|
1131
|
+
` if (withDeleted) return;`,
|
|
1132
|
+
` this.pipeline().unshift({ $match: { is_deleted: { $ne: true } } });`,
|
|
1133
|
+
`}`,
|
|
1134
|
+
``,
|
|
1135
|
+
`/**`,
|
|
1136
|
+
` * The \`deleted_by\` actor as a nested sub-schema (no own \`_id\`) so the whole`,
|
|
1137
|
+
` * object can be \`null\` while the document is live. \`refPath\` makes \`id\` a`,
|
|
1138
|
+
` * polymorphic reference resolved against the model named in`,
|
|
1139
|
+
` * \`deleted_by.model\`.`,
|
|
1140
|
+
` */`,
|
|
1141
|
+
`const deletedBySchema = new Schema<Actor>(`,
|
|
1142
|
+
` {`,
|
|
1143
|
+
` model: { type: String, required: true },`,
|
|
1144
|
+
` id: { type: Schema.Types.ObjectId, required: true, refPath: "deleted_by.model" },`,
|
|
1145
|
+
` },`,
|
|
1146
|
+
` { _id: false },`,
|
|
1147
|
+
`);`,
|
|
1148
|
+
``,
|
|
1149
|
+
`/**`,
|
|
1150
|
+
` * Soft deletion: an \`is_deleted\` flag plus \`deleted_at\` and a polymorphic`,
|
|
1151
|
+
` * \`deleted_by\` actor. Deleted documents are transparently excluded from`,
|
|
1152
|
+
` * queries unless explicitly included.`,
|
|
1153
|
+
` *`,
|
|
1154
|
+
` * read incl. deleted: Model.find().withDeleted() (or setOptions)`,
|
|
1155
|
+
` * read only deleted: Model.find().onlyDeleted()`,
|
|
1156
|
+
` * delete one: await doc.softDelete(actor)`,
|
|
1157
|
+
` * delete many: await Model.softDelete(filter, actor)`,
|
|
1158
|
+
` * restore: await doc.restore() / await Model.restore(filter)`,
|
|
1159
|
+
` */`,
|
|
1160
|
+
`export function softDeletePlugin(schema: Schema): void {`,
|
|
1161
|
+
` schema.add({`,
|
|
1162
|
+
` is_deleted: { type: Boolean, default: false, index: true },`,
|
|
1163
|
+
` deleted_at: { type: Date, default: null },`,
|
|
1164
|
+
` deleted_by: { type: deletedBySchema, default: null },`,
|
|
1165
|
+
` });`,
|
|
1166
|
+
``,
|
|
1167
|
+
` // Covers find*, count*, distinct, update*, replace*. Hard deletes`,
|
|
1168
|
+
` // (deleteOne/deleteMany) stay literal on purpose — when code says`,
|
|
1169
|
+
` // delete, the framework must not silently downgrade it.`,
|
|
1170
|
+
` schema.pre(/^(count|find|distinct|update|replace)/, excludeDeleted);`,
|
|
1171
|
+
` schema.pre("aggregate", excludeDeletedFromAggregate);`,
|
|
1172
|
+
``,
|
|
1173
|
+
` const query = schema.query as Record<string, (...args: never[]) => unknown>;`,
|
|
1174
|
+
` query.withDeleted = function (this: Query<unknown, unknown>) {`,
|
|
1175
|
+
` return this.setOptions({ withDeleted: true } as SoftDeleteOptions);`,
|
|
1176
|
+
` };`,
|
|
1177
|
+
` query.onlyDeleted = function (this: Query<unknown, unknown>) {`,
|
|
1178
|
+
` return this.setOptions({ withDeleted: true } as SoftDeleteOptions).where({`,
|
|
1179
|
+
` is_deleted: true,`,
|
|
1180
|
+
` });`,
|
|
1181
|
+
` };`,
|
|
1182
|
+
``,
|
|
1183
|
+
` schema.methods.softDelete = function (`,
|
|
1184
|
+
` this: HydratedDocument<SoftDeleteFields>,`,
|
|
1185
|
+
` by?: Actor,`,
|
|
1186
|
+
` ) {`,
|
|
1187
|
+
` this.set(deletedPatch(by));`,
|
|
1188
|
+
` return this.save();`,
|
|
1189
|
+
` };`,
|
|
1190
|
+
` schema.methods.restore = function (this: HydratedDocument<SoftDeleteFields>) {`,
|
|
1191
|
+
` this.set(restoredPatch());`,
|
|
1192
|
+
` return this.save();`,
|
|
1193
|
+
` };`,
|
|
1194
|
+
``,
|
|
1195
|
+
` schema.statics.softDelete = function (`,
|
|
1196
|
+
` this: Model<unknown>,`,
|
|
1197
|
+
` filter: Record<string, unknown>,`,
|
|
1198
|
+
` by?: Actor,`,
|
|
1199
|
+
` ) {`,
|
|
1200
|
+
` return this.updateMany(filter, { $set: deletedPatch(by) });`,
|
|
1201
|
+
` };`,
|
|
1202
|
+
` schema.statics.restore = function (`,
|
|
1203
|
+
` this: Model<unknown>,`,
|
|
1204
|
+
` filter: Record<string, unknown>,`,
|
|
1205
|
+
` ) {`,
|
|
1206
|
+
` // withDeleted so the guard doesn't filter out the very docs we restore.`,
|
|
1207
|
+
` return this.updateMany(filter, { $set: restoredPatch() }).setOptions({`,
|
|
1208
|
+
` withDeleted: true,`,
|
|
1209
|
+
` } as SoftDeleteOptions);`,
|
|
1210
|
+
` };`,
|
|
1211
|
+
`}`,
|
|
1212
|
+
``,
|
|
1213
|
+
].join("\n")],
|
|
1214
|
+
["modules/core/helpers/mongoose/plugins/base.plugin.ts", [
|
|
1215
|
+
`import type { Schema } from "mongoose";`,
|
|
1216
|
+
``,
|
|
1217
|
+
`import { softDeletePlugin } from "./soft-delete.plugin.js";`,
|
|
1218
|
+
`import { timestampsPlugin } from "./timestamps.plugin.js";`,
|
|
1219
|
+
``,
|
|
1220
|
+
`/**`,
|
|
1221
|
+
` * The base plugin every model gets. Composes the focused plugins so each`,
|
|
1222
|
+
` * stays single-responsibility; new cross-cutting behaviour (audit trail,`,
|
|
1223
|
+
` * versioning, …) slots in here without touching call sites.`,
|
|
1224
|
+
` */`,
|
|
1225
|
+
`export function baseModelPlugin(schema: Schema): void {`,
|
|
1226
|
+
` schema.plugin(timestampsPlugin);`,
|
|
1227
|
+
` schema.plugin(softDeletePlugin);`,
|
|
1228
|
+
`}`,
|
|
1229
|
+
``,
|
|
1230
|
+
].join("\n")],
|
|
1231
|
+
["modules/core/helpers/mongoose/register.ts", [
|
|
1232
|
+
`import mongoose from "mongoose";`,
|
|
1233
|
+
``,
|
|
1234
|
+
`import { baseModelPlugin } from "./plugins/base.plugin.js";`,
|
|
1235
|
+
``,
|
|
1236
|
+
`let registered = false;`,
|
|
1237
|
+
``,
|
|
1238
|
+
`/**`,
|
|
1239
|
+
` * Registers the base plugin globally so EVERY schema gets timestamps + soft`,
|
|
1240
|
+
` * delete. Global plugins only affect models compiled after registration, so`,
|
|
1241
|
+
` * call this before boot() — it's the first line of app.ts and worker.ts.`,
|
|
1242
|
+
` *`,
|
|
1243
|
+
` * An explicit function, deliberately not an import side effect: the old`,
|
|
1244
|
+
` * framework's side-effect register module made correctness depend on import`,
|
|
1245
|
+
` * order, which is exactly the class of bug this framework exists to kill.`,
|
|
1246
|
+
` */`,
|
|
1247
|
+
`export function registerBasePlugins(): void {`,
|
|
1248
|
+
` if (registered) return;`,
|
|
1249
|
+
` registered = true;`,
|
|
1250
|
+
` mongoose.plugin(baseModelPlugin);`,
|
|
1251
|
+
`}`,
|
|
1252
|
+
``,
|
|
1253
|
+
].join("\n")],
|
|
1254
|
+
["modules/core/helpers/mongoose/index.ts", [
|
|
1255
|
+
`import type { SchemaOptions } from "mongoose";`,
|
|
1256
|
+
``,
|
|
1257
|
+
`export { baseModelPlugin } from "./plugins/base.plugin.js";`,
|
|
1258
|
+
`export { softDeletePlugin } from "./plugins/soft-delete.plugin.js";`,
|
|
1259
|
+
`export { timestampsPlugin } from "./plugins/timestamps.plugin.js";`,
|
|
1260
|
+
`export { registerBasePlugins } from "./register.js";`,
|
|
1261
|
+
`export type {`,
|
|
1262
|
+
` Actor,`,
|
|
1263
|
+
` BaseDocument,`,
|
|
1264
|
+
` SoftDeleteFields,`,
|
|
1265
|
+
` SoftDeleteMethods,`,
|
|
1266
|
+
` Timestamps,`,
|
|
1267
|
+
`} from "./plugins/types.js";`,
|
|
1268
|
+
``,
|
|
1269
|
+
`/**`,
|
|
1270
|
+
` * Serialization conventions every model spreads into its schema options.`,
|
|
1271
|
+
` * Timestamps are NOT set here — the base plugin owns them (snake_case).`,
|
|
1272
|
+
` */`,
|
|
1273
|
+
`export const baseSchemaOptions: SchemaOptions = {`,
|
|
1274
|
+
` toJSON: {`,
|
|
1275
|
+
` versionKey: false,`,
|
|
1276
|
+
` transform: (_doc, ret: Record<string, unknown>) => {`,
|
|
1277
|
+
` delete ret._id;`,
|
|
1278
|
+
` return ret;`,
|
|
1279
|
+
` },`,
|
|
1280
|
+
` },`,
|
|
1281
|
+
`};`,
|
|
1282
|
+
``,
|
|
1283
|
+
].join("\n")],
|
|
1284
|
+
["modules/core/index.ts", [
|
|
1285
|
+
`/**`,
|
|
1286
|
+
` * What the core module offers the rest of the app.`,
|
|
1287
|
+
` *`,
|
|
1288
|
+
` * Other modules import these by package name — \`@app/core\` — never by a`,
|
|
1289
|
+
` * relative path climbing out of their own folder. That is what keeps the`,
|
|
1290
|
+
` * dependency visible: a module that uses this has to declare @app/core,`,
|
|
1291
|
+
` * so the coupling shows up in its package.json instead of hiding in an`,
|
|
1292
|
+
` * import string.`,
|
|
1293
|
+
` */`,
|
|
1294
|
+
`export {`,
|
|
1295
|
+
` appCache,`,
|
|
1296
|
+
` closeCache,`,
|
|
1297
|
+
` BaseCache,`,
|
|
1298
|
+
` MemoryCache,`,
|
|
1299
|
+
` RedisCache,`,
|
|
1300
|
+
` type Cache,`,
|
|
1301
|
+
`} from "./helpers/cache/index.js";`,
|
|
1302
|
+
``,
|
|
1303
|
+
`export {`,
|
|
1304
|
+
` baseSchemaOptions,`,
|
|
1305
|
+
` baseModelPlugin,`,
|
|
1306
|
+
` softDeletePlugin,`,
|
|
1307
|
+
` timestampsPlugin,`,
|
|
1308
|
+
` registerBasePlugins,`,
|
|
1309
|
+
` type Actor,`,
|
|
1310
|
+
` type BaseDocument,`,
|
|
1311
|
+
` type SoftDeleteFields,`,
|
|
1312
|
+
` type SoftDeleteMethods,`,
|
|
1313
|
+
` type Timestamps,`,
|
|
1314
|
+
`} from "./helpers/mongoose/index.js";`,
|
|
1315
|
+
``,
|
|
1316
|
+
].join("\n")],
|
|
1317
|
+
["modules/core/module.config.ts", [
|
|
1318
|
+
`import type { Ctx } from "@tulipes/core/boot";`,
|
|
1319
|
+
``,
|
|
1320
|
+
`import { closeCache } from "./helpers/cache/index.js";`,
|
|
1321
|
+
`import { registerBasePlugins } from "./helpers/mongoose/index.js";`,
|
|
1322
|
+
``,
|
|
1323
|
+
`/**`,
|
|
1324
|
+
` * Registering here — phase 6, before models compile in phase 8 — is`,
|
|
1325
|
+
` * what makes the base plugins apply in EVERY mode: backend, worker`,
|
|
1326
|
+
` * and script alike. Doing it in app.ts instead would leave scripts`,
|
|
1327
|
+
` * compiling models without timestamps or the soft-delete guard, so a`,
|
|
1328
|
+
` * script would happily return rows the API considers deleted.`,
|
|
1329
|
+
` */`,
|
|
1330
|
+
`registerBasePlugins();`,
|
|
1331
|
+
``,
|
|
1332
|
+
`export default function coreConfig(_ctx: Ctx) {`,
|
|
1333
|
+
` return {};`,
|
|
1334
|
+
`}`,
|
|
1335
|
+
``,
|
|
1336
|
+
`/** The sys core module owns app-wide infra glue lifecycles. */`,
|
|
1337
|
+
`export async function onShutdown(): Promise<void> {`,
|
|
1338
|
+
` await closeCache();`,
|
|
1339
|
+
`}`,
|
|
1340
|
+
``,
|
|
1341
|
+
].join("\n")],
|
|
842
1342
|
["modules/core/module.acl.ts", [
|
|
843
1343
|
`import type { AclBuilder } from "@tulipes/core/acl";`,
|
|
844
1344
|
``,
|
|
@@ -1058,9 +1558,10 @@ function renderProject(name, coreVersion) {
|
|
|
1058
1558
|
version: "0.0.0",
|
|
1059
1559
|
private: true,
|
|
1060
1560
|
type: "module",
|
|
1061
|
-
tulipes: { tier: "app", priority: 100, dependsOn: [] },
|
|
1561
|
+
tulipes: { tier: "app", priority: 100, dependsOn: ["core"] },
|
|
1062
1562
|
dependencies: {
|
|
1063
1563
|
"@tulipes/core": core,
|
|
1564
|
+
"@app/core": "workspace:*",
|
|
1064
1565
|
express: "^5",
|
|
1065
1566
|
mongoose: "^8",
|
|
1066
1567
|
},
|
|
@@ -1226,6 +1727,10 @@ function renderProject(name, coreVersion) {
|
|
|
1226
1727
|
`import { Schema } from "mongoose";`,
|
|
1227
1728
|
`import type { ModelDef } from "@tulipes/core/db";`,
|
|
1228
1729
|
``,
|
|
1730
|
+
`// Cross-module import by package name, never a relative path out`,
|
|
1731
|
+
`// of the module — the dependency is declared in package.json.`,
|
|
1732
|
+
`import { baseSchemaOptions } from "@app/core";`,
|
|
1733
|
+
``,
|
|
1229
1734
|
`/**`,
|
|
1230
1735
|
` * A model file is a DECLARATION, never a registration: the framework`,
|
|
1231
1736
|
` * compiles the schema on its own connection and puts it in the model`,
|
|
@@ -1239,7 +1744,7 @@ function renderProject(name, coreVersion) {
|
|
|
1239
1744
|
` message: { type: String, required: true },`,
|
|
1240
1745
|
` timesUsed: { type: Number, default: 0, min: 0 },`,
|
|
1241
1746
|
` },`,
|
|
1242
|
-
`
|
|
1747
|
+
` baseSchemaOptions,`,
|
|
1243
1748
|
`);`,
|
|
1244
1749
|
``,
|
|
1245
1750
|
`export default { name: "Greeting", schema: greetingSchema } satisfies ModelDef;`,
|
|
@@ -1257,11 +1762,19 @@ function renderProject(name, coreVersion) {
|
|
|
1257
1762
|
`export default async function seedGreetings({ models }: Ctx): Promise<void> {`,
|
|
1258
1763
|
` const Greeting = models!.get("Greeting");`,
|
|
1259
1764
|
``,
|
|
1260
|
-
`
|
|
1261
|
-
`
|
|
1262
|
-
`
|
|
1263
|
-
`
|
|
1264
|
-
`
|
|
1765
|
+
` try {`,
|
|
1766
|
+
` await Greeting.updateOne(`,
|
|
1767
|
+
` { name: "world" },`,
|
|
1768
|
+
` { $setOnInsert: { name: "world", message: "Hello, world!" } },`,
|
|
1769
|
+
` { upsert: true },`,
|
|
1770
|
+
` );`,
|
|
1771
|
+
` } catch (error) {`,
|
|
1772
|
+
` // Bootstrap tasks run in EVERY process, and backend and worker`,
|
|
1773
|
+
` // start together — concurrent upserts on a unique index race by`,
|
|
1774
|
+
` // design, and the loser gets a duplicate-key error. The row`,
|
|
1775
|
+
` // exists either way, which is all this task wanted.`,
|
|
1776
|
+
` if ((error as { code?: number }).code !== 11000) throw error;`,
|
|
1777
|
+
` }`,
|
|
1265
1778
|
`}`,
|
|
1266
1779
|
``,
|
|
1267
1780
|
].join("\n")], ["modules/hello/queues/hello.queues.ts", [
|
package/dist/cli/init.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/new-module.d.ts
CHANGED
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* `tulipes new module <name>` — scaffold
|
|
3
|
-
*
|
|
4
|
-
*
|
|
2
|
+
* `tulipes new module <name>` — scaffold every contract a module can hold,
|
|
3
|
+
* so the shape of a module is obvious from the folder rather than from
|
|
4
|
+
* memory. Delete what this feature does not need; an absent file is always
|
|
5
|
+
* valid, and deleting is faster than remembering the filename convention.
|
|
6
|
+
*
|
|
7
|
+
* The package scope is borrowed from an existing sibling so the app keeps
|
|
8
|
+
* one naming convention without configuring it anywhere.
|
|
5
9
|
*/
|
|
6
10
|
export declare function runNewModule(rootDir: string, name: string): Promise<void>;
|
package/dist/cli/new-module.js
CHANGED
|
@@ -1,9 +1,14 @@
|
|
|
1
1
|
import { existsSync, mkdirSync, readFileSync, readdirSync, writeFileSync } from "node:fs";
|
|
2
|
-
import { join } from "node:path";
|
|
2
|
+
import { dirname, join } from "node:path";
|
|
3
|
+
import { coreVersion } from "./package-info.js";
|
|
3
4
|
/**
|
|
4
|
-
* `tulipes new module <name>` — scaffold
|
|
5
|
-
*
|
|
6
|
-
*
|
|
5
|
+
* `tulipes new module <name>` — scaffold every contract a module can hold,
|
|
6
|
+
* so the shape of a module is obvious from the folder rather than from
|
|
7
|
+
* memory. Delete what this feature does not need; an absent file is always
|
|
8
|
+
* valid, and deleting is faster than remembering the filename convention.
|
|
9
|
+
*
|
|
10
|
+
* The package scope is borrowed from an existing sibling so the app keeps
|
|
11
|
+
* one naming convention without configuring it anywhere.
|
|
7
12
|
*/
|
|
8
13
|
export async function runNewModule(rootDir, name) {
|
|
9
14
|
if (!/^[a-z][a-z0-9-]*$/.test(name)) {
|
|
@@ -19,41 +24,208 @@ export async function runNewModule(rootDir, name) {
|
|
|
19
24
|
return;
|
|
20
25
|
}
|
|
21
26
|
const scope = detectScope(modulesDir) ?? "@app";
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
`
|
|
37
|
-
`}`,
|
|
38
|
-
``,
|
|
39
|
-
].join("\n"));
|
|
40
|
-
write(dir, join("routes", `${name}.routes.ts`), [
|
|
41
|
-
`import { Router } from "express";`,
|
|
42
|
-
`import type { Ctx } from "@tulipes/core/boot";`,
|
|
43
|
-
``,
|
|
44
|
-
`export default function ${camel(name)}Routes(_ctx: Ctx): Router {`,
|
|
45
|
-
` const router = Router();`,
|
|
46
|
-
``,
|
|
47
|
-
` router.get("/${name}/ping", (_req, res) => {`,
|
|
48
|
-
` res.json({ module: "${name}" });`,
|
|
49
|
-
` });`,
|
|
50
|
-
``,
|
|
51
|
-
` return router;`,
|
|
52
|
-
`}`,
|
|
53
|
-
``,
|
|
27
|
+
for (const [relPath, content] of renderModule(name, scope)) {
|
|
28
|
+
const filePath = join(dir, relPath);
|
|
29
|
+
mkdirSync(dirname(filePath), { recursive: true });
|
|
30
|
+
writeFileSync(filePath, content);
|
|
31
|
+
console.log(` create modules/${name}/${relPath}`);
|
|
32
|
+
}
|
|
33
|
+
console.log([
|
|
34
|
+
"",
|
|
35
|
+
`scaffolded modules/${name} (${scope}/${name})`,
|
|
36
|
+
"",
|
|
37
|
+
"next:",
|
|
38
|
+
" yarn install # the module is a workspace package",
|
|
39
|
+
" yarn sync # regenerate config types and .env.example",
|
|
40
|
+
"",
|
|
41
|
+
`Delete any file ${name} does not need — every one of them is optional.`,
|
|
54
42
|
].join("\n"));
|
|
55
|
-
|
|
56
|
-
|
|
43
|
+
}
|
|
44
|
+
const json = (value) => JSON.stringify(value, null, 2) + "\n";
|
|
45
|
+
function renderModule(name, scope) {
|
|
46
|
+
const fn = camel(name);
|
|
47
|
+
const Model = pascal(name);
|
|
48
|
+
return [
|
|
49
|
+
["package.json", json({
|
|
50
|
+
name: `${scope}/${name}`,
|
|
51
|
+
version: "0.0.0",
|
|
52
|
+
private: true,
|
|
53
|
+
type: "module",
|
|
54
|
+
// dependsOn "core" because the model below imports from it. The npm
|
|
55
|
+
// dependency makes it resolve; dependsOn makes the ordering explicit.
|
|
56
|
+
tulipes: { tier: "app", priority: 100, dependsOn: ["core"] },
|
|
57
|
+
dependencies: {
|
|
58
|
+
"@tulipes/core": `^${coreVersion()}`,
|
|
59
|
+
[`${scope}/core`]: "workspace:*",
|
|
60
|
+
express: "^5",
|
|
61
|
+
mongoose: "^8",
|
|
62
|
+
},
|
|
63
|
+
})],
|
|
64
|
+
// Empty on purpose: add an entry the moment this module needs a value
|
|
65
|
+
// that differs per deployment, then run `yarn sync`.
|
|
66
|
+
["meta.variables.json", json({ variables: [] })],
|
|
67
|
+
["module.config.ts", [
|
|
68
|
+
`import type { Ctx } from "@tulipes/core/boot";`,
|
|
69
|
+
``,
|
|
70
|
+
`/**`,
|
|
71
|
+
` * Runs in boot phase 6. Whatever this returns is stored at`,
|
|
72
|
+
` * \`config.${name}\` and typed by \`yarn sync\`, so other modules read it`,
|
|
73
|
+
` * without importing anything from here.`,
|
|
74
|
+
` */`,
|
|
75
|
+
`export default function ${fn}Config(_ctx: Ctx) {`,
|
|
76
|
+
` return {};`,
|
|
77
|
+
`}`,
|
|
78
|
+
``,
|
|
79
|
+
`/** After the process is fully up. Delete if unused. */`,
|
|
80
|
+
`export async function onReady(_ctx: Ctx): Promise<void> {}`,
|
|
81
|
+
``,
|
|
82
|
+
`/** Graceful shutdown, in REVERSE load order. Delete if unused. */`,
|
|
83
|
+
`export async function onShutdown(_ctx: Ctx): Promise<void> {}`,
|
|
84
|
+
``,
|
|
85
|
+
].join("\n")],
|
|
86
|
+
["module.acl.ts", [
|
|
87
|
+
`import type { AclBuilder } from "@tulipes/core/acl";`,
|
|
88
|
+
``,
|
|
89
|
+
`/**`,
|
|
90
|
+
` * Roles are global and defined once by the sys core module; a feature`,
|
|
91
|
+
` * module only attaches grants, on resources namespaced by its own`,
|
|
92
|
+
` * name ("${name}:read", "${name}:write").`,
|
|
93
|
+
` *`,
|
|
94
|
+
` * The grant below is commented out because granting to a role this`,
|
|
95
|
+
` * app does not define is a boot crash — uncomment it once you have`,
|
|
96
|
+
` * checked which roles exist in modules/core/module.acl.ts.`,
|
|
97
|
+
` */`,
|
|
98
|
+
`export default function ${fn}Acl(_acl: AclBuilder): void {`,
|
|
99
|
+
` // _acl.allow("user", "${name}:read");`,
|
|
100
|
+
`}`,
|
|
101
|
+
``,
|
|
102
|
+
].join("\n")],
|
|
103
|
+
[`helpers/${name}.helpers.ts`, [
|
|
104
|
+
`/**`,
|
|
105
|
+
` * Pure logic: no Express, no database, no framework — trivial to unit`,
|
|
106
|
+
` * test. The framework never scans this folder; import from it`,
|
|
107
|
+
` * directly. Anything a second module needs belongs in the core`,
|
|
108
|
+
` * module instead, imported as ${scope}/core.`,
|
|
109
|
+
` */`,
|
|
110
|
+
`export function describe${Model}(): string {`,
|
|
111
|
+
` return "${name}";`,
|
|
112
|
+
`}`,
|
|
113
|
+
``,
|
|
114
|
+
].join("\n")],
|
|
115
|
+
[`controllers/${name}.controllers.ts`, [
|
|
116
|
+
`import type { Request, Response } from "express";`,
|
|
117
|
+
`import type { Ctx } from "@tulipes/core/boot";`,
|
|
118
|
+
``,
|
|
119
|
+
`import { describe${Model} } from "../helpers/${name}.helpers.js";`,
|
|
120
|
+
``,
|
|
121
|
+
`/**`,
|
|
122
|
+
` * Controllers hold the work so routes stay a table of contents. Each`,
|
|
123
|
+
` * takes ctx and RETURNS the handler — that closure is what makes it`,
|
|
124
|
+
` * testable: pass a stub context, get a plain function.`,
|
|
125
|
+
` */`,
|
|
126
|
+
`export function index(_ctx: Ctx) {`,
|
|
127
|
+
` return (_req: Request, res: Response): void => {`,
|
|
128
|
+
` res.json({ module: describe${Model}() });`,
|
|
129
|
+
` };`,
|
|
130
|
+
`}`,
|
|
131
|
+
``,
|
|
132
|
+
].join("\n")],
|
|
133
|
+
[`routes/${name}.routes.ts`, [
|
|
134
|
+
`import { Router } from "express";`,
|
|
135
|
+
`import type { Ctx } from "@tulipes/core/boot";`,
|
|
136
|
+
``,
|
|
137
|
+
`import { index } from "../controllers/${name}.controllers.js";`,
|
|
138
|
+
``,
|
|
139
|
+
`export default function ${fn}Routes(ctx: Ctx): Router {`,
|
|
140
|
+
` const router = Router();`,
|
|
141
|
+
``,
|
|
142
|
+
` // Built from the shared prefix, so versioning the API is one line`,
|
|
143
|
+
` // in config/app.config.ts.`,
|
|
144
|
+
` const base = String(ctx.config.api?.prefix ?? "");`,
|
|
145
|
+
``,
|
|
146
|
+
` router.get(\`\${base}/${name}\`, index(ctx));`,
|
|
147
|
+
``,
|
|
148
|
+
` return router;`,
|
|
149
|
+
`}`,
|
|
150
|
+
``,
|
|
151
|
+
].join("\n")],
|
|
152
|
+
[`models/${name}.model.ts`, [
|
|
153
|
+
`import { Schema } from "mongoose";`,
|
|
154
|
+
`import type { ModelDef } from "@tulipes/core/db";`,
|
|
155
|
+
``,
|
|
156
|
+
`import { baseSchemaOptions } from "${scope}/core";`,
|
|
157
|
+
``,
|
|
158
|
+
`/**`,
|
|
159
|
+
` * A declaration, never a registration: the framework compiles this on`,
|
|
160
|
+
` * its own connection and puts it in the model store. Read it anywhere`,
|
|
161
|
+
` * with models!.get("${Model}"). Never call mongoose.model() yourself.`,
|
|
162
|
+
` */`,
|
|
163
|
+
`const ${fn}Schema = new Schema(`,
|
|
164
|
+
` {`,
|
|
165
|
+
` name: { type: String, required: true, trim: true },`,
|
|
166
|
+
` },`,
|
|
167
|
+
` baseSchemaOptions,`,
|
|
168
|
+
`);`,
|
|
169
|
+
``,
|
|
170
|
+
`export default { name: "${Model}", schema: ${fn}Schema } satisfies ModelDef;`,
|
|
171
|
+
``,
|
|
172
|
+
].join("\n")],
|
|
173
|
+
[`bootstrap/${name}.bootstrap.ts`, [
|
|
174
|
+
`import type { Ctx } from "@tulipes/core/boot";`,
|
|
175
|
+
``,
|
|
176
|
+
`/**`,
|
|
177
|
+
` * Runs after models are registered and before the process serves —`,
|
|
178
|
+
` * indexes, seed rows, defaults.`,
|
|
179
|
+
` *`,
|
|
180
|
+
` * MUST be idempotent: it runs on every boot of every process. Upsert,`,
|
|
181
|
+
` * never blind-insert.`,
|
|
182
|
+
` */`,
|
|
183
|
+
`export default async function ${fn}Bootstrap(_ctx: Ctx): Promise<void> {}`,
|
|
184
|
+
``,
|
|
185
|
+
].join("\n")],
|
|
186
|
+
[`queues/${name}.queues.ts`, [
|
|
187
|
+
`import type { Ctx } from "@tulipes/core/boot";`,
|
|
188
|
+
`import type { QueueRegistry } from "@tulipes/core/queues";`,
|
|
189
|
+
``,
|
|
190
|
+
`/**`,
|
|
191
|
+
` * ONE file describes both sides. The backend process registers the`,
|
|
192
|
+
` * queue so routes can produce into it; \`yarn worker\` turns the`,
|
|
193
|
+
` * processor into a live consumer.`,
|
|
194
|
+
` *`,
|
|
195
|
+
` * Produce from anywhere with ctx.queues:`,
|
|
196
|
+
` * await ctx.queues!.add("${name}.example", "job", { id });`,
|
|
197
|
+
` *`,
|
|
198
|
+
` * Queue names use "." — BullMQ reserves ":" as its redis separator.`,
|
|
199
|
+
` */`,
|
|
200
|
+
`export default function ${fn}Queues(_ctx: Ctx, queues: QueueRegistry): void {`,
|
|
201
|
+
` queues.define("${name}.example");`,
|
|
202
|
+
``,
|
|
203
|
+
` queues.process("${name}.example", async (job) => {`,
|
|
204
|
+
` // Jobs retry, so keep this safe to run twice. Pass ids in`,
|
|
205
|
+
` // job.data and re-read state here.`,
|
|
206
|
+
` return { handled: job.name };`,
|
|
207
|
+
` });`,
|
|
208
|
+
`}`,
|
|
209
|
+
``,
|
|
210
|
+
].join("\n")],
|
|
211
|
+
[`sockets/${name}.sockets.ts`, [
|
|
212
|
+
`import type { Ctx } from "@tulipes/core/boot";`,
|
|
213
|
+
`import type { SocketRegistry } from "@tulipes/core/sockets";`,
|
|
214
|
+
``,
|
|
215
|
+
`/**`,
|
|
216
|
+
` * Backend mode only. A namespace is claimed by exactly one module;`,
|
|
217
|
+
` * emit from anywhere with ctx.sockets!.of("/${name}").`,
|
|
218
|
+
` */`,
|
|
219
|
+
`export default function ${fn}Sockets(_ctx: Ctx, sockets: SocketRegistry): void {`,
|
|
220
|
+
` sockets.namespace("/${name}", (nsp) => {`,
|
|
221
|
+
` nsp.on("connection", (socket) => {`,
|
|
222
|
+
` socket.emit("ready", { module: "${name}" });`,
|
|
223
|
+
` });`,
|
|
224
|
+
` });`,
|
|
225
|
+
`}`,
|
|
226
|
+
``,
|
|
227
|
+
].join("\n")],
|
|
228
|
+
];
|
|
57
229
|
}
|
|
58
230
|
function detectScope(modulesDir) {
|
|
59
231
|
let entries;
|
|
@@ -75,10 +247,11 @@ function detectScope(modulesDir) {
|
|
|
75
247
|
}
|
|
76
248
|
return undefined;
|
|
77
249
|
}
|
|
78
|
-
function write(dir, file, content) {
|
|
79
|
-
writeFileSync(join(dir, file), content);
|
|
80
|
-
}
|
|
81
250
|
function camel(kebab) {
|
|
82
251
|
return kebab.replace(/-([a-z])/g, (_, c) => c.toUpperCase());
|
|
83
252
|
}
|
|
253
|
+
function pascal(kebab) {
|
|
254
|
+
const c = camel(kebab);
|
|
255
|
+
return c.charAt(0).toUpperCase() + c.slice(1);
|
|
256
|
+
}
|
|
84
257
|
//# sourceMappingURL=new-module.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"new-module.js","sourceRoot":"","sources":["../../src/cli/new-module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC1F,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"new-module.js","sourceRoot":"","sources":["../../src/cli/new-module.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/templates/CLAUDE.md
CHANGED
|
@@ -29,9 +29,11 @@ applies before you write code.
|
|
|
29
29
|
6. **Errors are `HttpError`.** `throw new HttpError(404, "…")` from
|
|
30
30
|
anywhere in a route; the framework's terminal handler renders it.
|
|
31
31
|
Never hand-roll an error-response shape.
|
|
32
|
-
7. **Cross-module imports use the package name** (`@app/users
|
|
33
|
-
relative path that climbs out of the module. The
|
|
34
|
-
what keeps modules independent
|
|
32
|
+
7. **Cross-module imports use the package name** (`@app/users`,
|
|
33
|
+
`@app/core`), never a relative path that climbs out of the module. The
|
|
34
|
+
workspace boundary is what keeps modules independent, and a package
|
|
35
|
+
name makes the dependency visible in package.json — declare it there
|
|
36
|
+
and in `dependsOn`.
|
|
35
37
|
|
|
36
38
|
## Where things go
|
|
37
39
|
|
|
@@ -42,7 +44,7 @@ applies before you write code.
|
|
|
42
44
|
| Config for one feature | that module's `module.config.ts` |
|
|
43
45
|
| Middleware for every request | a sys-tier module's routes file |
|
|
44
46
|
| Middleware for one feature's routes | that module's own `Router` |
|
|
45
|
-
| Helper used by ≥2 modules | `
|
|
47
|
+
| Helper used by ≥2 modules | the sys core module, exported from its `index.ts` and imported as `@app/core` |
|
|
46
48
|
| Helper used by one module | that module's `helpers/` |
|
|
47
49
|
| One-off task (backfill, export, admin chore) | `scripts/`, booted with `mode: "script"` |
|
|
48
50
|
|
|
@@ -28,7 +28,7 @@ problems the report has not reached yet.
|
|
|
28
28
|
| `environment` | `"abc" is not a number` / `not one of: …` | Value fails its declared `type`/`enum`. Fix the value or the spec. |
|
|
29
29
|
| `environment` | `variable "X" is already declared by module "y"` | Two modules declare the same name. Delete the duplicate; read the other module's variable instead. |
|
|
30
30
|
| `module graph` | `dependsOn "x" — no such module exists` | Typo, or you used the package name. `dependsOn` takes short names (`"users"`). |
|
|
31
|
-
| `module graph` | `dependency cycle: a → b → a` | Mutual dependency. Move the shared part
|
|
31
|
+
| `module graph` | `dependency cycle: a → b → a` | Mutual dependency. Move the shared part into the core module or a third module. |
|
|
32
32
|
| `module graph` | `sys module cannot depend on app module` | A sys module needs something app-tier. Either it is not really sys, or the dependency belongs in `lib/`. |
|
|
33
33
|
| `config` | `module.config must default-export a function` | Missing/misspelled `export default`. |
|
|
34
34
|
| `acl` | `allow() on unknown role "x"` | Role never defined. Define it in the sys `core` module, and `dependsOn` that module. |
|
|
@@ -63,12 +63,20 @@ export default async function seedPlans({ models }: Ctx): Promise<void> {
|
|
|
63
63
|
**Make bootstrap tasks idempotent** — they run on every boot, in every
|
|
64
64
|
process, including each worker. Upsert; never blind-insert.
|
|
65
65
|
|
|
66
|
+
**And tolerate concurrency.** Backend and worker start together, so two
|
|
67
|
+
processes run the same seed at the same time. Concurrent upserts on a
|
|
68
|
+
unique index race: one inserts, the other gets a duplicate-key error
|
|
69
|
+
(`code: 11000`). Catch that one code and carry on — the row exists, which
|
|
70
|
+
is all the task wanted.
|
|
71
|
+
|
|
66
72
|
## Gotchas
|
|
67
73
|
|
|
68
74
|
- Global plugins (timestamps, soft delete) only apply to schemas compiled
|
|
69
|
-
*after* registration, which is why `registerBasePlugins()`
|
|
70
|
-
`
|
|
71
|
-
|
|
75
|
+
*after* registration, which is why `registerBasePlugins()` is called from
|
|
76
|
+
the sys core module's `module.config.ts` — phase 6, before models compile
|
|
77
|
+
in phase 8. That covers every mode, scripts included; calling it from
|
|
78
|
+
`app.ts` instead would leave scripts compiling models without the
|
|
79
|
+
soft-delete guard.
|
|
72
80
|
- Mongoose queries are lazy: `await` them, and prefer `.lean()` for reads
|
|
73
81
|
you only serialize.
|
|
74
82
|
- If the app soft-deletes, ordinary queries already exclude deleted rows;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: tulipes-module
|
|
3
|
-
description: Use when adding a new feature to a Tulipes app — a new module under modules/ — or when deciding whether something belongs in an existing module
|
|
3
|
+
description: Use when adding a new feature to a Tulipes app — a new module under modules/ — or when deciding whether something belongs in an existing module or a new one. Covers the tulipes manifest key, tier, priority, dependsOn and workspace wiring.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Adding a module
|
|
@@ -14,14 +14,18 @@ touching anything else.
|
|
|
14
14
|
- **Extend an existing module** when the work is part of that feature
|
|
15
15
|
(another users endpoint → `modules/users`).
|
|
16
16
|
- **New module** when it is a separate feature with its own vocabulary.
|
|
17
|
-
-
|
|
18
|
-
|
|
17
|
+
- **The sys core module** when it is a shared helper with no routes or
|
|
18
|
+
models of its own — export it from `modules/core/index.ts` and import it
|
|
19
|
+
as `@app/core`. There is no top-level `lib/`: a helper two modules need
|
|
20
|
+
is owned by a module like everything else.
|
|
19
21
|
|
|
20
22
|
## Steps
|
|
21
23
|
|
|
22
|
-
1. Scaffold: `yarn tulipes new module billing`. It creates
|
|
23
|
-
|
|
24
|
-
|
|
24
|
+
1. Scaffold: `yarn tulipes new module billing`. It creates every
|
|
25
|
+
contract — package.json (scope detected from siblings), meta.variables,
|
|
26
|
+
config with lifecycle hooks, ACL, helper, controller, routes, model,
|
|
27
|
+
bootstrap, queue and socket. Delete the ones this feature does not
|
|
28
|
+
need; an absent file is always valid.
|
|
25
29
|
2. Set ordering in `modules/billing/package.json`:
|
|
26
30
|
|
|
27
31
|
```json
|
|
@@ -55,6 +59,6 @@ touching anything else.
|
|
|
55
59
|
- A `sys` module may not `dependsOn` an `app` module — that inverts the
|
|
56
60
|
tier guarantee and crashes the boot.
|
|
57
61
|
- Cycles crash the boot with the cycle printed. If two modules need each
|
|
58
|
-
other, the shared part belongs in
|
|
62
|
+
other, the shared part belongs in the core module or a third module.
|
|
59
63
|
- The folder name is cosmetic; the **short name** (last segment of the
|
|
60
64
|
package name) is what `dependsOn` and the config namespace use.
|