@happyvertical/smrt-features 0.39.0 → 0.39.1

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/LICENSE ADDED
@@ -0,0 +1,7 @@
1
+ Copyright <2025> <Happy Vertical Corporation>
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
4
+
5
+ The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
6
+
7
+ THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
package/dist/index.js CHANGED
@@ -2,7 +2,7 @@ import { FeatureOverrideEffect, GLOBAL_FEATURE_SCOPE_ID } from "./types.js";
2
2
  import { ObjectRegistry, SmrtCollection, SmrtObject, createQualifiedName, isQualifiedName, parseQualifiedName, smrt } from "@happyvertical/smrt-core";
3
3
  import { importWorkspaceModule } from "@happyvertical/smrt-core/utils/import-workspace-module";
4
4
  //#region src/__smrt-register__.ts
5
- ObjectRegistry.registerPackageManifest(JSON.parse("{\"version\":\"1.0.0\",\"timestamp\":1783721916518,\"packageName\":\"@happyvertical/smrt-features\",\"packageVersion\":\"0.39.0\",\"objects\":{\"@happyvertical/smrt-features:FeatureDefinition\":{\"name\":\"featuredefinition\",\"className\":\"FeatureDefinition\",\"qualifiedName\":\"@happyvertical/smrt-features:FeatureDefinition\",\"collection\":\"featuredefinitions\",\"filePath\":\"/home/runner/_work/smrt/smrt/packages/features/src/feature-definition.ts\",\"packageName\":\"@happyvertical/smrt-features\",\"fields\":{\"featureKey\":{\"type\":\"text\",\"required\":false,\"default\":\"\"},\"packageName\":{\"type\":\"text\",\"required\":false,\"default\":\"\"},\"qualifiedClassName\":{\"type\":\"text\",\"required\":false,\"default\":\"\"},\"className\":{\"type\":\"text\",\"required\":false,\"default\":\"\"},\"localId\":{\"type\":\"text\",\"required\":false,\"default\":\"\"},\"defaultEnabled\":{\"type\":\"boolean\",\"required\":false,\"default\":false},\"label\":{\"type\":\"text\",\"required\":false,\"default\":\"\"},\"description\":{\"type\":\"text\",\"required\":false,\"default\":\"\"},\"metadata\":{\"type\":\"text\",\"required\":false,\"default\":\"\"},\"visibility\":{\"type\":\"text\",\"required\":false,\"default\":\"public\"}},\"methods\":{\"getMetadata\":{\"name\":\"getMetadata\",\"async\":false,\"parameters\":[],\"returnType\":\"FeatureMetadata\",\"isStatic\":false,\"isPublic\":true},\"setMetadata\":{\"name\":\"setMetadata\",\"async\":false,\"parameters\":[{\"name\":\"metadata\",\"type\":\"FeatureMetadata | null\",\"optional\":false}],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableName\":\"_smrt_feature_definitions\",\"api\":{\"include\":[\"list\",\"get\"]},\"cli\":{\"include\":[\"list\",\"get\"],\"exclude\":[\"getMetadata\",\"setMetadata\"]},\"mcp\":{\"include\":[\"list\",\"get\"],\"exclude\":[\"getMetadata\",\"setMetadata\"]},\"conflictColumns\":[\"feature_key\"]},\"extends\":\"SmrtObject\",\"exportName\":\"FeatureDefinition\",\"collectionExportName\":\"FeatureDefinitionCollection\",\"schema\":{\"tableName\":\"_smrt_feature_definitions\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"_smrt_feature_definitions\\\" (\\n \\\"id\\\" UUID PRIMARY KEY NOT NULL,\\n \\\"slug\\\" TEXT NOT NULL,\\n \\\"context\\\" TEXT NOT NULL DEFAULT '',\\n \\\"created_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"updated_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"feature_key\\\" TEXT DEFAULT '',\\n \\\"package_name\\\" TEXT DEFAULT '',\\n \\\"qualified_class_name\\\" TEXT DEFAULT '',\\n \\\"class_name\\\" TEXT DEFAULT '',\\n \\\"local_id\\\" TEXT DEFAULT '',\\n \\\"default_enabled\\\" BOOLEAN DEFAULT FALSE,\\n \\\"label\\\" TEXT DEFAULT '',\\n \\\"description\\\" TEXT DEFAULT '',\\n \\\"metadata\\\" TEXT DEFAULT '',\\n \\\"visibility\\\" TEXT DEFAULT 'public'\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"feature_key\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"\"},\"package_name\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"\"},\"qualified_class_name\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"\"},\"class_name\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"\"},\"local_id\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"\"},\"default_enabled\":{\"type\":\"BOOLEAN\",\"notNull\":false,\"unique\":false,\"default\":false},\"label\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"\"},\"description\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"\"},\"metadata\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"\"},\"visibility\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"public\"}},\"indexes\":[{\"name\":\"_smrt_feature_definitions_id_idx\",\"columns\":[\"id\"]},{\"name\":\"_smrt_feature_definitions_feature_key_idx\",\"columns\":[\"feature_key\"],\"unique\":true}],\"version\":\"8813204c\"}},\"@happyvertical/smrt-features:FeatureDefinitionCollection\":{\"name\":\"featuredefinitioncollection\",\"className\":\"FeatureDefinitionCollection\",\"qualifiedName\":\"@happyvertical/smrt-features:FeatureDefinitionCollection\",\"collection\":\"featuredefinitions\",\"filePath\":\"/home/runner/_work/smrt/smrt/packages/features/src/feature-definitions.ts\",\"packageName\":\"@happyvertical/smrt-features\",\"fields\":{},\"methods\":{\"findByFeatureKey\":{\"name\":\"findByFeatureKey\",\"async\":true,\"parameters\":[{\"name\":\"featureKey\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<FeatureDefinition | null>\",\"isStatic\":false,\"isPublic\":true},\"findByPackageName\":{\"name\":\"findByPackageName\",\"async\":true,\"parameters\":[{\"name\":\"packageName\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<FeatureDefinition[]>\",\"isStatic\":false,\"isPublic\":true},\"upsertDefinition\":{\"name\":\"upsertDefinition\",\"async\":true,\"parameters\":[{\"name\":\"seed\",\"type\":\"FeatureDefinitionSeed\",\"optional\":false}],\"returnType\":\"Promise<object>\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableName\":\"_smrt_feature_definitions\"},\"extends\":\"SmrtCollection\",\"extendsTypeArg\":\"FeatureDefinition\",\"exportName\":\"FeatureDefinitionCollection\",\"collectionExportName\":\"FeatureDefinitionCollectionCollection\",\"schema\":{\"tableName\":\"_smrt_feature_definitions\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"_smrt_feature_definitions\\\" (\\n \\\"id\\\" UUID PRIMARY KEY NOT NULL,\\n \\\"slug\\\" TEXT NOT NULL,\\n \\\"context\\\" TEXT NOT NULL DEFAULT '',\\n \\\"created_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"updated_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"}},\"indexes\":[{\"name\":\"_smrt_feature_definitions_id_idx\",\"columns\":[\"id\"]},{\"name\":\"_smrt_feature_definitions_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true}],\"version\":\"e4eaf68f\"}},\"@happyvertical/smrt-features:FeatureOverride\":{\"name\":\"featureoverride\",\"className\":\"FeatureOverride\",\"qualifiedName\":\"@happyvertical/smrt-features:FeatureOverride\",\"collection\":\"featureoverrides\",\"filePath\":\"/home/runner/_work/smrt/smrt/packages/features/src/feature-override.ts\",\"packageName\":\"@happyvertical/smrt-features\",\"fields\":{\"featureKey\":{\"type\":\"text\",\"required\":false,\"default\":\"\"},\"scopeType\":{\"type\":\"text\",\"required\":false,\"default\":\"global\"},\"scopeId\":{\"type\":\"text\",\"required\":false},\"effect\":{\"type\":\"text\",\"required\":false}},\"methods\":{\"isInherit\":{\"name\":\"isInherit\",\"async\":false,\"parameters\":[],\"returnType\":\"boolean\",\"isStatic\":false,\"isPublic\":true},\"isEnabled\":{\"name\":\"isEnabled\",\"async\":false,\"parameters\":[],\"returnType\":\"boolean\",\"isStatic\":false,\"isPublic\":true},\"isDisabled\":{\"name\":\"isDisabled\",\"async\":false,\"parameters\":[],\"returnType\":\"boolean\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableName\":\"_smrt_feature_overrides\",\"api\":{\"include\":[\"list\",\"get\",\"create\",\"update\",\"delete\"]},\"cli\":{\"exclude\":[\"isInherit\",\"isEnabled\",\"isDisabled\"]},\"mcp\":{\"exclude\":[\"isInherit\",\"isEnabled\",\"isDisabled\"]},\"conflictColumns\":[\"feature_key\",\"scope_type\",\"scope_id\"]},\"extends\":\"SmrtObject\",\"exportName\":\"FeatureOverride\",\"collectionExportName\":\"FeatureOverrideCollection\",\"schema\":{\"tableName\":\"_smrt_feature_overrides\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"_smrt_feature_overrides\\\" (\\n \\\"id\\\" UUID PRIMARY KEY NOT NULL,\\n \\\"slug\\\" TEXT NOT NULL,\\n \\\"context\\\" TEXT NOT NULL DEFAULT '',\\n \\\"created_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"updated_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"feature_key\\\" TEXT DEFAULT '',\\n \\\"scope_type\\\" TEXT DEFAULT 'global',\\n \\\"scope_id\\\" TEXT,\\n \\\"effect\\\" TEXT\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"feature_key\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"\"},\"scope_type\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"global\"},\"scope_id\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"effect\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false}},\"indexes\":[{\"name\":\"_smrt_feature_overrides_id_idx\",\"columns\":[\"id\"]},{\"name\":\"_smrt_feature_overrides_feature_key_scope_type_idx\",\"columns\":[\"feature_key\",\"scope_type\",\"scope_id\"],\"unique\":true}],\"version\":\"d61cf901\"}},\"@happyvertical/smrt-features:FeatureOverrideCollection\":{\"name\":\"featureoverridecollection\",\"className\":\"FeatureOverrideCollection\",\"qualifiedName\":\"@happyvertical/smrt-features:FeatureOverrideCollection\",\"collection\":\"featureoverrides\",\"filePath\":\"/home/runner/_work/smrt/smrt/packages/features/src/feature-overrides.ts\",\"packageName\":\"@happyvertical/smrt-features\",\"fields\":{},\"methods\":{\"findByFeatureKey\":{\"name\":\"findByFeatureKey\",\"async\":true,\"parameters\":[{\"name\":\"featureKey\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<FeatureOverride[]>\",\"isStatic\":false,\"isPublic\":true},\"findByFeatureAndScope\":{\"name\":\"findByFeatureAndScope\",\"async\":true,\"parameters\":[{\"name\":\"featureKey\",\"type\":\"string\",\"optional\":false},{\"name\":\"scopeType\",\"type\":\"FeatureScopeType\",\"optional\":false},{\"name\":\"scopeId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<FeatureOverride | null>\",\"isStatic\":false,\"isPublic\":true},\"getGlobalOverride\":{\"name\":\"getGlobalOverride\",\"async\":true,\"parameters\":[{\"name\":\"featureKey\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<FeatureOverride | null>\",\"isStatic\":false,\"isPublic\":true},\"getTenantOverride\":{\"name\":\"getTenantOverride\",\"async\":true,\"parameters\":[{\"name\":\"featureKey\",\"type\":\"string\",\"optional\":false},{\"name\":\"tenantId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<FeatureOverride | null>\",\"isStatic\":false,\"isPublic\":true},\"getOverrideMap\":{\"name\":\"getOverrideMap\",\"async\":true,\"parameters\":[{\"name\":\"featureKey\",\"type\":\"string\",\"optional\":false},{\"name\":\"scopeType\",\"type\":\"FeatureScopeType\",\"optional\":false},{\"name\":\"scopeIds\",\"type\":\"string[]\",\"optional\":false}],\"returnType\":\"Promise<Map<string, FeatureOverride>>\",\"isStatic\":false,\"isPublic\":true},\"setOverride\":{\"name\":\"setOverride\",\"async\":true,\"parameters\":[{\"name\":\"featureKey\",\"type\":\"string\",\"optional\":false},{\"name\":\"scopeType\",\"type\":\"FeatureScopeType\",\"optional\":false},{\"name\":\"scopeId\",\"type\":\"string\",\"optional\":false},{\"name\":\"effect\",\"type\":\"FeatureOverrideEffect\",\"optional\":false}],\"returnType\":\"Promise<FeatureOverride>\",\"isStatic\":false,\"isPublic\":true},\"setGlobalOverride\":{\"name\":\"setGlobalOverride\",\"async\":true,\"parameters\":[{\"name\":\"featureKey\",\"type\":\"string\",\"optional\":false},{\"name\":\"effect\",\"type\":\"FeatureOverrideEffect\",\"optional\":false}],\"returnType\":\"Promise<FeatureOverride>\",\"isStatic\":false,\"isPublic\":true},\"setTenantOverride\":{\"name\":\"setTenantOverride\",\"async\":true,\"parameters\":[{\"name\":\"featureKey\",\"type\":\"string\",\"optional\":false},{\"name\":\"tenantId\",\"type\":\"string\",\"optional\":false},{\"name\":\"effect\",\"type\":\"FeatureOverrideEffect\",\"optional\":false}],\"returnType\":\"Promise<FeatureOverride>\",\"isStatic\":false,\"isPublic\":true},\"removeOverride\":{\"name\":\"removeOverride\",\"async\":true,\"parameters\":[{\"name\":\"featureKey\",\"type\":\"string\",\"optional\":false},{\"name\":\"scopeType\",\"type\":\"FeatureScopeType\",\"optional\":false},{\"name\":\"scopeId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<boolean>\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableName\":\"_smrt_feature_overrides\"},\"extends\":\"SmrtCollection\",\"extendsTypeArg\":\"FeatureOverride\",\"exportName\":\"FeatureOverrideCollection\",\"collectionExportName\":\"FeatureOverrideCollectionCollection\",\"schema\":{\"tableName\":\"_smrt_feature_overrides\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"_smrt_feature_overrides\\\" (\\n \\\"id\\\" UUID PRIMARY KEY NOT NULL,\\n \\\"slug\\\" TEXT NOT NULL,\\n \\\"context\\\" TEXT NOT NULL DEFAULT '',\\n \\\"created_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"updated_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"}},\"indexes\":[{\"name\":\"_smrt_feature_overrides_id_idx\",\"columns\":[\"id\"]},{\"name\":\"_smrt_feature_overrides_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true}],\"version\":\"e0e6e44b\"}}},\"moduleType\":\"smrt\",\"smrtDependencies\":[\"@happyvertical/smrt-core\",\"@happyvertical/smrt-users\"]}"));
5
+ ObjectRegistry.registerPackageManifest(JSON.parse("{\"version\":\"1.0.0\",\"timestamp\":1783729362183,\"packageName\":\"@happyvertical/smrt-features\",\"packageVersion\":\"0.39.1\",\"objects\":{\"@happyvertical/smrt-features:FeatureDefinition\":{\"name\":\"featuredefinition\",\"className\":\"FeatureDefinition\",\"qualifiedName\":\"@happyvertical/smrt-features:FeatureDefinition\",\"collection\":\"featuredefinitions\",\"filePath\":\"/home/runner/_work/smrt/smrt/packages/features/src/feature-definition.ts\",\"packageName\":\"@happyvertical/smrt-features\",\"fields\":{\"featureKey\":{\"type\":\"text\",\"required\":false,\"default\":\"\"},\"packageName\":{\"type\":\"text\",\"required\":false,\"default\":\"\"},\"qualifiedClassName\":{\"type\":\"text\",\"required\":false,\"default\":\"\"},\"className\":{\"type\":\"text\",\"required\":false,\"default\":\"\"},\"localId\":{\"type\":\"text\",\"required\":false,\"default\":\"\"},\"defaultEnabled\":{\"type\":\"boolean\",\"required\":false,\"default\":false},\"label\":{\"type\":\"text\",\"required\":false,\"default\":\"\"},\"description\":{\"type\":\"text\",\"required\":false,\"default\":\"\"},\"metadata\":{\"type\":\"text\",\"required\":false,\"default\":\"\"},\"visibility\":{\"type\":\"text\",\"required\":false,\"default\":\"public\"}},\"methods\":{\"getMetadata\":{\"name\":\"getMetadata\",\"async\":false,\"parameters\":[],\"returnType\":\"FeatureMetadata\",\"isStatic\":false,\"isPublic\":true},\"setMetadata\":{\"name\":\"setMetadata\",\"async\":false,\"parameters\":[{\"name\":\"metadata\",\"type\":\"FeatureMetadata | null\",\"optional\":false}],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableName\":\"_smrt_feature_definitions\",\"api\":{\"include\":[\"list\",\"get\"]},\"cli\":{\"include\":[\"list\",\"get\"],\"exclude\":[\"getMetadata\",\"setMetadata\"]},\"mcp\":{\"include\":[\"list\",\"get\"],\"exclude\":[\"getMetadata\",\"setMetadata\"]},\"conflictColumns\":[\"feature_key\"]},\"extends\":\"SmrtObject\",\"exportName\":\"FeatureDefinition\",\"collectionExportName\":\"FeatureDefinitionCollection\",\"schema\":{\"tableName\":\"_smrt_feature_definitions\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"_smrt_feature_definitions\\\" (\\n \\\"id\\\" UUID PRIMARY KEY NOT NULL,\\n \\\"slug\\\" TEXT NOT NULL,\\n \\\"context\\\" TEXT NOT NULL DEFAULT '',\\n \\\"created_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"updated_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"feature_key\\\" TEXT DEFAULT '',\\n \\\"package_name\\\" TEXT DEFAULT '',\\n \\\"qualified_class_name\\\" TEXT DEFAULT '',\\n \\\"class_name\\\" TEXT DEFAULT '',\\n \\\"local_id\\\" TEXT DEFAULT '',\\n \\\"default_enabled\\\" BOOLEAN DEFAULT FALSE,\\n \\\"label\\\" TEXT DEFAULT '',\\n \\\"description\\\" TEXT DEFAULT '',\\n \\\"metadata\\\" TEXT DEFAULT '',\\n \\\"visibility\\\" TEXT DEFAULT 'public'\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"feature_key\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"\"},\"package_name\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"\"},\"qualified_class_name\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"\"},\"class_name\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"\"},\"local_id\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"\"},\"default_enabled\":{\"type\":\"BOOLEAN\",\"notNull\":false,\"unique\":false,\"default\":false},\"label\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"\"},\"description\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"\"},\"metadata\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"\"},\"visibility\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"public\"}},\"indexes\":[{\"name\":\"_smrt_feature_definitions_id_idx\",\"columns\":[\"id\"]},{\"name\":\"_smrt_feature_definitions_feature_key_idx\",\"columns\":[\"feature_key\"],\"unique\":true}],\"version\":\"8813204c\"}},\"@happyvertical/smrt-features:FeatureDefinitionCollection\":{\"name\":\"featuredefinitioncollection\",\"className\":\"FeatureDefinitionCollection\",\"qualifiedName\":\"@happyvertical/smrt-features:FeatureDefinitionCollection\",\"collection\":\"featuredefinitions\",\"filePath\":\"/home/runner/_work/smrt/smrt/packages/features/src/feature-definitions.ts\",\"packageName\":\"@happyvertical/smrt-features\",\"fields\":{},\"methods\":{\"findByFeatureKey\":{\"name\":\"findByFeatureKey\",\"async\":true,\"parameters\":[{\"name\":\"featureKey\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<FeatureDefinition | null>\",\"isStatic\":false,\"isPublic\":true},\"findByPackageName\":{\"name\":\"findByPackageName\",\"async\":true,\"parameters\":[{\"name\":\"packageName\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<FeatureDefinition[]>\",\"isStatic\":false,\"isPublic\":true},\"upsertDefinition\":{\"name\":\"upsertDefinition\",\"async\":true,\"parameters\":[{\"name\":\"seed\",\"type\":\"FeatureDefinitionSeed\",\"optional\":false}],\"returnType\":\"Promise<object>\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableName\":\"_smrt_feature_definitions\"},\"extends\":\"SmrtCollection\",\"extendsTypeArg\":\"FeatureDefinition\",\"exportName\":\"FeatureDefinitionCollection\",\"collectionExportName\":\"FeatureDefinitionCollectionCollection\",\"schema\":{\"tableName\":\"_smrt_feature_definitions\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"_smrt_feature_definitions\\\" (\\n \\\"id\\\" UUID PRIMARY KEY NOT NULL,\\n \\\"slug\\\" TEXT NOT NULL,\\n \\\"context\\\" TEXT NOT NULL DEFAULT '',\\n \\\"created_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"updated_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"}},\"indexes\":[{\"name\":\"_smrt_feature_definitions_id_idx\",\"columns\":[\"id\"]},{\"name\":\"_smrt_feature_definitions_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true}],\"version\":\"e4eaf68f\"}},\"@happyvertical/smrt-features:FeatureOverride\":{\"name\":\"featureoverride\",\"className\":\"FeatureOverride\",\"qualifiedName\":\"@happyvertical/smrt-features:FeatureOverride\",\"collection\":\"featureoverrides\",\"filePath\":\"/home/runner/_work/smrt/smrt/packages/features/src/feature-override.ts\",\"packageName\":\"@happyvertical/smrt-features\",\"fields\":{\"featureKey\":{\"type\":\"text\",\"required\":false,\"default\":\"\"},\"scopeType\":{\"type\":\"text\",\"required\":false,\"default\":\"global\"},\"scopeId\":{\"type\":\"text\",\"required\":false},\"effect\":{\"type\":\"text\",\"required\":false}},\"methods\":{\"isInherit\":{\"name\":\"isInherit\",\"async\":false,\"parameters\":[],\"returnType\":\"boolean\",\"isStatic\":false,\"isPublic\":true},\"isEnabled\":{\"name\":\"isEnabled\",\"async\":false,\"parameters\":[],\"returnType\":\"boolean\",\"isStatic\":false,\"isPublic\":true},\"isDisabled\":{\"name\":\"isDisabled\",\"async\":false,\"parameters\":[],\"returnType\":\"boolean\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableName\":\"_smrt_feature_overrides\",\"api\":{\"include\":[\"list\",\"get\",\"create\",\"update\",\"delete\"]},\"cli\":{\"exclude\":[\"isInherit\",\"isEnabled\",\"isDisabled\"]},\"mcp\":{\"exclude\":[\"isInherit\",\"isEnabled\",\"isDisabled\"]},\"conflictColumns\":[\"feature_key\",\"scope_type\",\"scope_id\"]},\"extends\":\"SmrtObject\",\"exportName\":\"FeatureOverride\",\"collectionExportName\":\"FeatureOverrideCollection\",\"schema\":{\"tableName\":\"_smrt_feature_overrides\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"_smrt_feature_overrides\\\" (\\n \\\"id\\\" UUID PRIMARY KEY NOT NULL,\\n \\\"slug\\\" TEXT NOT NULL,\\n \\\"context\\\" TEXT NOT NULL DEFAULT '',\\n \\\"created_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"updated_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"feature_key\\\" TEXT DEFAULT '',\\n \\\"scope_type\\\" TEXT DEFAULT 'global',\\n \\\"scope_id\\\" TEXT,\\n \\\"effect\\\" TEXT\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"feature_key\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"\"},\"scope_type\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false,\"default\":\"global\"},\"scope_id\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"effect\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false}},\"indexes\":[{\"name\":\"_smrt_feature_overrides_id_idx\",\"columns\":[\"id\"]},{\"name\":\"_smrt_feature_overrides_feature_key_scope_type_idx\",\"columns\":[\"feature_key\",\"scope_type\",\"scope_id\"],\"unique\":true}],\"version\":\"d61cf901\"}},\"@happyvertical/smrt-features:FeatureOverrideCollection\":{\"name\":\"featureoverridecollection\",\"className\":\"FeatureOverrideCollection\",\"qualifiedName\":\"@happyvertical/smrt-features:FeatureOverrideCollection\",\"collection\":\"featureoverrides\",\"filePath\":\"/home/runner/_work/smrt/smrt/packages/features/src/feature-overrides.ts\",\"packageName\":\"@happyvertical/smrt-features\",\"fields\":{},\"methods\":{\"findByFeatureKey\":{\"name\":\"findByFeatureKey\",\"async\":true,\"parameters\":[{\"name\":\"featureKey\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<FeatureOverride[]>\",\"isStatic\":false,\"isPublic\":true},\"findByFeatureAndScope\":{\"name\":\"findByFeatureAndScope\",\"async\":true,\"parameters\":[{\"name\":\"featureKey\",\"type\":\"string\",\"optional\":false},{\"name\":\"scopeType\",\"type\":\"FeatureScopeType\",\"optional\":false},{\"name\":\"scopeId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<FeatureOverride | null>\",\"isStatic\":false,\"isPublic\":true},\"getGlobalOverride\":{\"name\":\"getGlobalOverride\",\"async\":true,\"parameters\":[{\"name\":\"featureKey\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<FeatureOverride | null>\",\"isStatic\":false,\"isPublic\":true},\"getTenantOverride\":{\"name\":\"getTenantOverride\",\"async\":true,\"parameters\":[{\"name\":\"featureKey\",\"type\":\"string\",\"optional\":false},{\"name\":\"tenantId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<FeatureOverride | null>\",\"isStatic\":false,\"isPublic\":true},\"getOverrideMap\":{\"name\":\"getOverrideMap\",\"async\":true,\"parameters\":[{\"name\":\"featureKey\",\"type\":\"string\",\"optional\":false},{\"name\":\"scopeType\",\"type\":\"FeatureScopeType\",\"optional\":false},{\"name\":\"scopeIds\",\"type\":\"string[]\",\"optional\":false}],\"returnType\":\"Promise<Map<string, FeatureOverride>>\",\"isStatic\":false,\"isPublic\":true},\"setOverride\":{\"name\":\"setOverride\",\"async\":true,\"parameters\":[{\"name\":\"featureKey\",\"type\":\"string\",\"optional\":false},{\"name\":\"scopeType\",\"type\":\"FeatureScopeType\",\"optional\":false},{\"name\":\"scopeId\",\"type\":\"string\",\"optional\":false},{\"name\":\"effect\",\"type\":\"FeatureOverrideEffect\",\"optional\":false}],\"returnType\":\"Promise<FeatureOverride>\",\"isStatic\":false,\"isPublic\":true},\"setGlobalOverride\":{\"name\":\"setGlobalOverride\",\"async\":true,\"parameters\":[{\"name\":\"featureKey\",\"type\":\"string\",\"optional\":false},{\"name\":\"effect\",\"type\":\"FeatureOverrideEffect\",\"optional\":false}],\"returnType\":\"Promise<FeatureOverride>\",\"isStatic\":false,\"isPublic\":true},\"setTenantOverride\":{\"name\":\"setTenantOverride\",\"async\":true,\"parameters\":[{\"name\":\"featureKey\",\"type\":\"string\",\"optional\":false},{\"name\":\"tenantId\",\"type\":\"string\",\"optional\":false},{\"name\":\"effect\",\"type\":\"FeatureOverrideEffect\",\"optional\":false}],\"returnType\":\"Promise<FeatureOverride>\",\"isStatic\":false,\"isPublic\":true},\"removeOverride\":{\"name\":\"removeOverride\",\"async\":true,\"parameters\":[{\"name\":\"featureKey\",\"type\":\"string\",\"optional\":false},{\"name\":\"scopeType\",\"type\":\"FeatureScopeType\",\"optional\":false},{\"name\":\"scopeId\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<boolean>\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableName\":\"_smrt_feature_overrides\"},\"extends\":\"SmrtCollection\",\"extendsTypeArg\":\"FeatureOverride\",\"exportName\":\"FeatureOverrideCollection\",\"collectionExportName\":\"FeatureOverrideCollectionCollection\",\"schema\":{\"tableName\":\"_smrt_feature_overrides\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"_smrt_feature_overrides\\\" (\\n \\\"id\\\" UUID PRIMARY KEY NOT NULL,\\n \\\"slug\\\" TEXT NOT NULL,\\n \\\"context\\\" TEXT NOT NULL DEFAULT '',\\n \\\"created_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"updated_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"}},\"indexes\":[{\"name\":\"_smrt_feature_overrides_id_idx\",\"columns\":[\"id\"]},{\"name\":\"_smrt_feature_overrides_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true}],\"version\":\"e0e6e44b\"}}},\"moduleType\":\"smrt\",\"smrtDependencies\":[\"@happyvertical/smrt-core\",\"@happyvertical/smrt-users\"]}"));
6
6
  //#endregion
7
7
  //#region src/utils.ts
8
8
  function createFeatureKey(qualifiedClassName, localId) {
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "version": "1.0.0",
3
- "timestamp": 1783721916518,
3
+ "timestamp": 1783729362183,
4
4
  "packageName": "@happyvertical/smrt-features",
5
- "packageVersion": "0.39.0",
5
+ "packageVersion": "0.39.1",
6
6
  "objects": {
7
7
  "@happyvertical/smrt-features:FeatureDefinition": {
8
8
  "name": "featuredefinition",
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
- "generatedAt": "2026-07-10T22:18:38.088Z",
3
+ "generatedAt": "2026-07-11T00:22:43.391Z",
4
4
  "packageName": "@happyvertical/smrt-features",
5
- "packageVersion": "0.39.0",
5
+ "packageVersion": "0.39.1",
6
6
  "sourceManifestPath": "dist/manifest.json",
7
7
  "agentDocPath": "AGENTS.md",
8
8
  "sourceHashes": {
9
- "manifest": "1310b3c966f44f276a8804b12cf4903792557e2df1a4ac9d41bc59c2008d7a5f",
10
- "packageJson": "5acec28269b0c68f613ed663e9f21a9fcc38512fadbf66dd32d93dad026e7e54",
9
+ "manifest": "dd9e0db7f4a82e07e734a20338a999cb72d5a67f10dadf62ef0598e036b306b5",
10
+ "packageJson": "6ea1898bb4325b666fb0bfbd0e0bcad674b67aab25414823faca16e938dd7821",
11
11
  "agents": "0d14be2150e562d6834a67a6fd2a5d8bf63a1654e1f5a5165d1c97c2057574a8"
12
12
  },
13
13
  "exports": [
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@happyvertical/smrt-features",
3
- "version": "0.39.0",
3
+ "version": "0.39.1",
4
4
  "description": "Code-first feature flags and tenant-aware overrides for the SMRT framework",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -18,28 +18,17 @@
18
18
  "./manifest": "./dist/manifest.json",
19
19
  "./manifest.json": "./dist/manifest.json"
20
20
  },
21
- "scripts": {
22
- "build": "vite build --mode library",
23
- "build:watch": "vite build --mode library --watch",
24
- "clean": "rm -rf dist",
25
- "dev": "vite dev",
26
- "prepack": "node ../../scripts/prepack-package.js",
27
- "test": "vitest run",
28
- "test:watch": "vitest",
29
- "typecheck": "tsc --noEmit -p tsconfig.json",
30
- "verify:pack": "node ../../scripts/verify-package-types-exports.js ."
31
- },
32
21
  "dependencies": {
33
- "@happyvertical/smrt-core": "workspace:*"
22
+ "@happyvertical/smrt-core": "0.39.1"
34
23
  },
35
24
  "devDependencies": {
36
- "@happyvertical/smrt-cli": "workspace:*",
37
- "@happyvertical/smrt-users": "workspace:*",
38
- "@happyvertical/smrt-vitest": "workspace:*",
39
25
  "@types/node": "24.13.2",
40
26
  "typescript": "^5.9.3",
41
27
  "vite": "^8.1.3",
42
- "vitest": "^4.1.9"
28
+ "vitest": "^4.1.9",
29
+ "@happyvertical/smrt-vitest": "0.39.1",
30
+ "@happyvertical/smrt-cli": "0.39.1",
31
+ "@happyvertical/smrt-users": "0.39.1"
43
32
  },
44
33
  "keywords": [
45
34
  "smrt",
@@ -58,5 +47,15 @@
58
47
  "type": "git",
59
48
  "url": "https://github.com/happyvertical/smrt.git",
60
49
  "directory": "packages/features"
50
+ },
51
+ "scripts": {
52
+ "build": "vite build --mode library",
53
+ "build:watch": "vite build --mode library --watch",
54
+ "clean": "rm -rf dist",
55
+ "dev": "vite dev",
56
+ "test": "vitest run",
57
+ "test:watch": "vitest",
58
+ "typecheck": "tsc --noEmit -p tsconfig.json",
59
+ "verify:pack": "node ../../scripts/verify-package-types-exports.js ."
61
60
  }
62
- }
61
+ }