@happyvertical/smrt-core 0.57.29 → 0.57.31
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/AGENTS.md +1 -0
- package/agents/build-knowledge.md +8 -0
- package/agents/deployment-phases.md +71 -0
- package/agents/generators.md +26 -0
- package/dist/consumer-plugin/index.d.ts.map +1 -1
- package/dist/consumer-plugin/index.js +9 -3
- package/dist/consumer-plugin/index.js.map +1 -1
- package/dist/manifest/static-manifest.js +1 -1
- package/dist/manifest/static-manifest.js.map +1 -1
- package/dist/manifest/store.js +1 -1
- package/dist/manifest.json +1 -1
- package/dist/migrations/deployment-phase-tracker.d.ts +57 -0
- package/dist/migrations/deployment-phase-tracker.d.ts.map +1 -0
- package/dist/migrations/deployment-phase-tracker.js +179 -0
- package/dist/migrations/deployment-phase-tracker.js.map +1 -0
- package/dist/migrations/index.d.ts +1 -0
- package/dist/migrations/index.d.ts.map +1 -1
- package/dist/migrations/index.js +2 -1
- package/dist/migrations.js +2 -1
- package/dist/registry.d.ts.map +1 -1
- package/dist/registry.js +3 -1
- package/dist/registry.js.map +1 -1
- package/dist/smrt-knowledge.json +15 -9
- package/dist/vite-plugin/sveltekit-generator.d.ts.map +1 -1
- package/dist/vite-plugin/sveltekit-generator.js +21 -12
- package/dist/vite-plugin/sveltekit-generator.js.map +1 -1
- package/package.json +10 -10
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sveltekit-generator.d.ts","sourceRoot":"","sources":["../../src/vite-plugin/sveltekit-generator.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAEvE,OAAO,EACL,KAAK,iBAAiB,EAYtB,KAAK,kBAAkB,EACxB,MAAM,gCAAgC,CAAC;AAOxC,OAAO,KAAK,EAEV,aAAa,EAEd,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EACV,gBAAgB,EAChB,qBAAqB,EACrB,mBAAmB,EACpB,MAAM,qBAAkB,CAAC;AA+B1B,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,kFAAkF;IAClF,yBAAyB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9C;;;;OAIG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,iFAAiF;IACjF,SAAS,CAAC,EAAE,qBAAqB,CAAC;IAClC;;;OAGG;IACH,YAAY,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IACrC;;;;OAIG;IACH,aAAa,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IACtC;;;;;;;;;;;;;;OAcG;IACH,WAAW,CAAC,EAAE;QACZ,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;QAC1B,gBAAgB,CAAC,EAAE,OAAO,CAAC;KAC5B,CAAC;IACF;;;;;;OAMG;IACH,cAAc,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IACvC,+EAA+E;IAC/E,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACjC;AAWD,MAAM,WAAW,4BAA4B;IAC3C,KAAK,EAAE,MAAM,GAAG,YAAY,CAAC;IAC7B,MAAM,EAAE,aAAa,CAAC;IACtB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B;
|
|
1
|
+
{"version":3,"file":"sveltekit-generator.d.ts","sourceRoot":"","sources":["../../src/vite-plugin/sveltekit-generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -52,6 +52,11 @@ function getRegistrationPackageName(manifest, objectDef, isLocal) {
|
|
|
52
52
|
if (isLocal) return objectDef.packageName ?? manifest.packageName;
|
|
53
53
|
return objectDef.packageName;
|
|
54
54
|
}
|
|
55
|
+
/** Use the same exact identity for collection registration and route factories. */
|
|
56
|
+
function collectionResourceRegistryKey(projectRoot, className, objectDef, manifest) {
|
|
57
|
+
const packageName = getRegistrationPackageName(manifest, objectDef, isLocalObject(projectRoot, objectDef));
|
|
58
|
+
return objectDef.qualifiedName || (className.includes(":") ? className : packageName ? `${packageName}:${extractSimpleClassName(className)}` : className);
|
|
59
|
+
}
|
|
55
60
|
function toSingleQuotedStringLiteral(value) {
|
|
56
61
|
return `'${JSON.stringify(value).slice(1, -1).replaceAll("'", "\\'")}'`;
|
|
57
62
|
}
|
|
@@ -1022,7 +1027,7 @@ async function generateRegistrationFile(projectRoot, manifest, options) {
|
|
|
1022
1027
|
objects: [],
|
|
1023
1028
|
hasCollectionImport: false
|
|
1024
1029
|
};
|
|
1025
|
-
if (isCollectionManifestClass(manifest, objectDef) && !
|
|
1030
|
+
if (isCollectionManifestClass(manifest, objectDef) && !hasGeneratedCollectionActions(manifest, objectDef)) packageEntry.hasCollectionImport = true;
|
|
1026
1031
|
else packageEntry.objects.push({
|
|
1027
1032
|
simpleName: objectDef.exportName || extractSimpleClassName(className),
|
|
1028
1033
|
bindingName: registrationBindings.get(className) || extractSimpleClassName(className)
|
|
@@ -1038,7 +1043,7 @@ async function generateRegistrationFile(projectRoot, manifest, options) {
|
|
|
1038
1043
|
const normalized = relative(configDir, objectDef.filePath).replace(/\\/g, "/").replace(/\.(ts|js|tsx|jsx)$/, "");
|
|
1039
1044
|
importPath = normalized.startsWith(".") ? normalized : `./${normalized}`;
|
|
1040
1045
|
} else importPath = getSvelteKitImportPath(projectRoot, void 0, options.objectsDir, simpleClassName);
|
|
1041
|
-
if (isCollectionManifestClass(manifest, objectDef) && !
|
|
1046
|
+
if (isCollectionManifestClass(manifest, objectDef) && !hasGeneratedCollectionActions(manifest, objectDef)) {
|
|
1042
1047
|
localSideEffectImports.add(importPath);
|
|
1043
1048
|
continue;
|
|
1044
1049
|
}
|
|
@@ -1142,9 +1147,8 @@ async function generateRegistrationFile(projectRoot, manifest, options) {
|
|
|
1142
1147
|
`});`
|
|
1143
1148
|
].join("\n");
|
|
1144
1149
|
}).filter((registration) => registration !== null).join("\n");
|
|
1145
|
-
const collectionRegistrations = Object.entries(manifest.objects).filter(([, objectDef]) =>
|
|
1146
|
-
const
|
|
1147
|
-
const qualifiedName = objectDef.qualifiedName || (packageName ? `${packageName}:${extractSimpleClassName(className)}` : className);
|
|
1150
|
+
const collectionRegistrations = Object.entries(manifest.objects).filter(([, objectDef]) => hasGeneratedCollectionActions(manifest, objectDef) && (!consumerOwnsExternalRegistration || isLocalObject(projectRoot, objectDef))).map(([className, objectDef]) => {
|
|
1151
|
+
const qualifiedName = collectionResourceRegistryKey(projectRoot, className, objectDef, manifest);
|
|
1148
1152
|
const bindingName = registrationBindings.get(className) || extractSimpleClassName(className);
|
|
1149
1153
|
return `ObjectRegistry.registerCollection(${JSON.stringify(qualifiedName)}, ${bindingName});`;
|
|
1150
1154
|
}).join("\n");
|
|
@@ -1169,13 +1173,18 @@ ${registrations}
|
|
|
1169
1173
|
${collectionMetadata.size > 0 ? `
|
|
1170
1174
|
// Metadata only: collection constructors were installed by their decorators.
|
|
1171
1175
|
ObjectRegistry.registerPackageManifest(JSON.parse(${collectionMetadataLiteral}));
|
|
1172
|
-
|
|
1176
|
+
` : ""}
|
|
1177
|
+
// Bind every generated REST action receiver, independently of discovery eligibility.
|
|
1173
1178
|
${collectionRegistrations}
|
|
1174
|
-
|
|
1179
|
+
`;
|
|
1175
1180
|
if (!existsSync(configDir)) mkdirSync(configDir, { recursive: true });
|
|
1176
1181
|
writeFileSync(registrationFilePath, registrationContent, "utf-8");
|
|
1177
1182
|
console.log(`[smrt] Generated registration file: ${registrationFilePath}`);
|
|
1178
1183
|
}
|
|
1184
|
+
/** REST action receivers need a live binding even when CLI discovery is closed. */
|
|
1185
|
+
function hasGeneratedCollectionActions(manifest, objectDef) {
|
|
1186
|
+
return isCollectionManifestClass(manifest, objectDef) && resolveApiActionSet(objectDef, manifest).size > 0;
|
|
1187
|
+
}
|
|
1179
1188
|
/** Named HTTP CLI collection actions need metadata and a live receiver binding. */
|
|
1180
1189
|
function isCollectionActionResource(manifest, objectDef) {
|
|
1181
1190
|
if (!isCollectionManifestClass(manifest, objectDef)) return false;
|
|
@@ -1189,7 +1198,7 @@ function buildRegistrationBindings(manifest) {
|
|
|
1189
1198
|
const keysBySimpleName = /* @__PURE__ */ new Map();
|
|
1190
1199
|
const reservedBindings = /* @__PURE__ */ new Set();
|
|
1191
1200
|
for (const [manifestKey, objectDef] of Object.entries(manifest.objects)) {
|
|
1192
|
-
if (isCollectionManifestClass(manifest, objectDef) && !
|
|
1201
|
+
if (isCollectionManifestClass(manifest, objectDef) && !hasGeneratedCollectionActions(manifest, objectDef)) continue;
|
|
1193
1202
|
const simpleName = extractSimpleClassName(manifestKey);
|
|
1194
1203
|
reservedBindings.add(simpleName);
|
|
1195
1204
|
const keys = keysBySimpleName.get(simpleName) ?? [];
|
|
@@ -2080,7 +2089,7 @@ function generateActionRouteTemplate(projectRoot, routeDir, routeSpecs, objectDe
|
|
|
2080
2089
|
const tenantScoped = isTenantScoped(objectDef) || routeSpecs.some((spec) => !!spec.lookupObjectDef && isTenantScoped(spec.lookupObjectDef));
|
|
2081
2090
|
const principalContext = usesPrincipalContext(objectDef) || routeSpecs.some((spec) => !!spec.lookupObjectDef && usesPrincipalContext(spec.lookupObjectDef));
|
|
2082
2091
|
const needsTenantContext = tenantScoped || principalContext;
|
|
2083
|
-
const handlers = routeSpecs.map((spec) => generateActionRouteHandler(spec.lookupClassName, spec.actionName, spec.actionDef, spec.routeConfig, spec.hostType, tenantScoped, needsTenantContext, lookupModelType.typeName, hostModelType.typeName, resolveOperationPermissionAlias(objectDef.decoratorConfig, spec.actionName)?.action)).join("\n");
|
|
2092
|
+
const handlers = routeSpecs.map((spec) => generateActionRouteHandler(spec.lookupClassName, spec.actionName, spec.actionDef, spec.routeConfig, spec.hostType, tenantScoped, needsTenantContext, lookupModelType.typeName, hostModelType.typeName, resolveOperationPermissionAlias(objectDef.decoratorConfig, spec.actionName)?.action, spec.hostType === "collection" ? collectionResourceRegistryKey(projectRoot, spec.hostClassName, objectDef, semanticManifest) : void 0)).join("\n");
|
|
2084
2093
|
return `${AUTO_GENERATED_ROUTE_HEADER}
|
|
2085
2094
|
// DO NOT EDIT - changes will be overwritten
|
|
2086
2095
|
|
|
@@ -2089,7 +2098,7 @@ ${generateAuthGuardHelper(objectDef, semanticManifest, hostType === "collection"
|
|
|
2089
2098
|
${generateTypedRouteErrorHelper()}
|
|
2090
2099
|
${handlers}`;
|
|
2091
2100
|
}
|
|
2092
|
-
function generateActionRouteHandler(lookupClassName, actionName, actionDef, routeConfig, hostType, tenantScoped, needsTenantContext, lookupTypeName, hostTypeName, permissionAction) {
|
|
2101
|
+
function generateActionRouteHandler(lookupClassName, actionName, actionDef, routeConfig, hostType, tenantScoped, needsTenantContext, lookupTypeName, hostTypeName, permissionAction, collectionRegistryKey = lookupClassName) {
|
|
2093
2102
|
const successResponse = ` return json({
|
|
2094
2103
|
action: '${actionName}',
|
|
2095
2104
|
result: toPublicResult(result, publicJsonOptions),
|
|
@@ -2113,9 +2122,9 @@ function generateActionRouteHandler(lookupClassName, actionName, actionDef, rout
|
|
|
2113
2122
|
export const ${handlerName}: RequestHandler = async (${collectionHandlerArgs}) => {
|
|
2114
2123
|
${authGuardLine}
|
|
2115
2124
|
const publicJsonOptions = getPublicJsonOptions(locals);
|
|
2116
|
-
${generateCollectionLoad(
|
|
2125
|
+
${generateCollectionLoad(collectionRegistryKey, { typeName: lookupTypeName })}
|
|
2117
2126
|
const typedCollection = collection as unknown as ${hostTypeName};
|
|
2118
|
-
${generateCollectionNotRegisteredError(
|
|
2127
|
+
${generateCollectionNotRegisteredError(collectionRegistryKey)}
|
|
2119
2128
|
${staticTargetLoad}
|
|
2120
2129
|
|
|
2121
2130
|
${optionsLoad}${scopedOptions.source} let result: unknown;
|