@happyvertical/smrt-features 0.51.19 → 0.51.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/AGENTS.md +17 -0
  2. package/README.md +152 -0
  3. package/dist/__smrt-register__.d.ts +2 -0
  4. package/dist/__smrt-register__.d.ts.map +1 -0
  5. package/dist/feature-definition.d.ts +18 -0
  6. package/dist/feature-definition.d.ts.map +1 -0
  7. package/dist/feature-definitions.d.ts +13 -0
  8. package/dist/feature-definitions.d.ts.map +1 -0
  9. package/dist/feature-override-service.d.ts +41 -0
  10. package/dist/feature-override-service.d.ts.map +1 -0
  11. package/dist/feature-override.d.ts +13 -0
  12. package/dist/feature-override.d.ts.map +1 -0
  13. package/dist/feature-overrides.d.ts +16 -0
  14. package/dist/feature-overrides.d.ts.map +1 -0
  15. package/dist/feature-resolver.d.ts +18 -0
  16. package/dist/feature-resolver.d.ts.map +1 -0
  17. package/dist/feature-settings.d.ts +209 -0
  18. package/dist/feature-settings.d.ts.map +1 -0
  19. package/dist/feature-sync.d.ts +17 -0
  20. package/dist/feature-sync.d.ts.map +1 -0
  21. package/dist/index.d.ts +11 -263
  22. package/dist/index.d.ts.map +1 -0
  23. package/dist/index.js +155 -2
  24. package/dist/index.js.map +1 -1
  25. package/dist/manifest.json +1 -1
  26. package/dist/smrt-knowledge.json +14 -6
  27. package/dist/svelte/components/FeatureSettingsPanel.svelte +338 -0
  28. package/dist/svelte/components/FeatureSettingsPanel.svelte.d.ts +52 -0
  29. package/dist/svelte/components/FeatureSettingsPanel.svelte.d.ts.map +1 -0
  30. package/dist/svelte/index.d.ts +17 -0
  31. package/dist/svelte/index.d.ts.map +1 -0
  32. package/dist/svelte/index.js +14 -0
  33. package/dist/svelte/types.d.ts +76 -0
  34. package/dist/svelte/types.d.ts.map +1 -0
  35. package/dist/svelte/types.js +37 -0
  36. package/dist/types.d.ts +107 -131
  37. package/dist/types.d.ts.map +1 -0
  38. package/dist/utils.d.ts +28 -0
  39. package/dist/utils.d.ts.map +1 -0
  40. package/package.json +26 -7
package/dist/types.d.ts CHANGED
@@ -1,131 +1,107 @@
1
- import { SmartObjectManifest } from '@happyvertical/smrt-core';
2
- import { SmrtClassOptions } from '@happyvertical/smrt-core';
3
- import { SmrtObject } from '@happyvertical/smrt-core';
4
-
5
- export declare interface FeatureDefinitionOptions {
6
- id?: string;
7
- featureKey?: string;
8
- packageName?: string;
9
- qualifiedClassName?: string;
10
- className?: string;
11
- localId?: string;
12
- defaultEnabled?: boolean;
13
- label?: string;
14
- description?: string;
15
- metadata?: FeatureMetadata | string | null;
16
- visibility?: string;
17
- createdAt?: Date;
18
- updatedAt?: Date;
19
- }
20
-
21
- export declare interface FeatureDefinitionSeed {
22
- featureKey: string;
23
- packageName: string;
24
- qualifiedClassName: string;
25
- className: string;
26
- localId: string;
27
- defaultEnabled: boolean;
28
- label?: string;
29
- description?: string;
30
- metadata?: FeatureMetadata;
31
- visibility?: string;
32
- }
33
-
34
- export declare interface FeatureMetadata {
35
- [key: string]: unknown;
36
- }
37
-
38
- export declare enum FeatureOverrideEffect {
39
- INHERIT = "inherit",
40
- ENABLE = "enable",
41
- DISABLE = "disable"
42
- }
43
-
44
- export declare interface FeatureOverrideOptions {
45
- id?: string;
46
- featureKey?: string;
47
- scopeType?: FeatureScopeType;
48
- scopeId?: string;
49
- effect?: FeatureOverrideEffect;
50
- createdAt?: Date;
51
- updatedAt?: Date;
52
- }
53
-
54
- export declare interface FeatureResolutionContext {
55
- tenantId?: string;
56
- }
57
-
58
- export declare interface FeatureResolverOptions {
59
- tenantHierarchyLoader?: FeatureTenantHierarchyLoader;
60
- }
61
-
62
- export declare type FeatureScopeType = 'global' | 'tenant';
63
-
64
- export declare interface FeatureSyncResult {
65
- total: number;
66
- created: number;
67
- updated: number;
68
- unchanged: number;
69
- deleted: number;
70
- featureKeys: string[];
71
- }
72
-
73
- /**
74
- * Constructor type for any `@smrt()`-decorated class that may declare feature
75
- * toggles. Feature targets always extend `SmrtObject`, so this mirrors
76
- * `@happyvertical/smrt-core`'s internal (non-exported) `SmrtObjectConstructor`
77
- * and remains assignable to it for `ObjectRegistry.getClassByConstructor`.
78
- */
79
- export declare type FeatureTargetConstructor = new (...args: unknown[]) => SmrtObject;
80
-
81
- export declare type FeatureTenantHierarchyLoader = (options: SmrtClassOptions) => Promise<FeatureTenantHierarchyProvider | null>;
82
-
83
- export declare interface FeatureTenantHierarchyProvider {
84
- getChain(tenantId: string): Promise<FeatureTenantNode[]>;
85
- }
86
-
87
- export declare interface FeatureTenantNode {
88
- id: string;
89
- inheritPermissions: boolean;
90
- cascadePermissions: boolean;
91
- }
92
-
93
- export declare interface FeatureUsersModule {
94
- TenantCollection: {
95
- create(options: SmrtClassOptions): Promise<{
96
- get(criteria: {
97
- id: string;
98
- }): Promise<FeatureUsersTenantRecord | null>;
99
- getAncestorsFromRoot(tenantId: string): Promise<FeatureUsersTenantRecord[]>;
100
- }>;
101
- };
102
- }
103
-
104
- /**
105
- * Minimal structural shape of a tenant record returned by
106
- * `@happyvertical/smrt-users`. Only the permission-cascade fields consumed by
107
- * feature resolution are modeled; everything else is left unconstrained.
108
- */
109
- export declare interface FeatureUsersTenantRecord {
110
- id: string;
111
- inheritPermissions?: boolean;
112
- cascadePermissions?: boolean;
113
- }
114
-
115
- export declare const GLOBAL_FEATURE_SCOPE_ID = "*";
116
-
117
- export { SmartObjectManifest }
118
-
119
- export { SmrtClassOptions }
120
-
121
- export declare interface SyncDefinitionsOptions {
122
- classNames?: string[];
123
- constructors?: FeatureTargetConstructor[];
124
- pruneStale?: boolean;
125
- }
126
-
127
- export declare interface SyncManifestOptions {
128
- pruneStale?: boolean;
129
- }
130
-
131
- export { }
1
+ import { SmartObjectManifest, SmrtClassOptions, SmrtObject } from '@happyvertical/smrt-core';
2
+ export declare const GLOBAL_FEATURE_SCOPE_ID = "*";
3
+ export type FeatureScopeType = 'global' | 'tenant';
4
+ /**
5
+ * Constructor type for any `@smrt()`-decorated class that may declare feature
6
+ * toggles. Feature targets always extend `SmrtObject`, so this mirrors
7
+ * `@happyvertical/smrt-core`'s internal (non-exported) `SmrtObjectConstructor`
8
+ * and remains assignable to it for `ObjectRegistry.getClassByConstructor`.
9
+ */
10
+ export type FeatureTargetConstructor = new (...args: unknown[]) => SmrtObject;
11
+ export declare enum FeatureOverrideEffect {
12
+ INHERIT = "inherit",
13
+ ENABLE = "enable",
14
+ DISABLE = "disable"
15
+ }
16
+ export interface FeatureMetadata {
17
+ [key: string]: unknown;
18
+ }
19
+ export interface FeatureDefinitionOptions {
20
+ id?: string;
21
+ featureKey?: string;
22
+ packageName?: string;
23
+ qualifiedClassName?: string;
24
+ className?: string;
25
+ localId?: string;
26
+ defaultEnabled?: boolean;
27
+ label?: string;
28
+ description?: string;
29
+ metadata?: FeatureMetadata | string | null;
30
+ visibility?: string;
31
+ createdAt?: Date;
32
+ updatedAt?: Date;
33
+ }
34
+ export interface FeatureOverrideOptions {
35
+ id?: string;
36
+ featureKey?: string;
37
+ scopeType?: FeatureScopeType;
38
+ scopeId?: string;
39
+ effect?: FeatureOverrideEffect;
40
+ createdAt?: Date;
41
+ updatedAt?: Date;
42
+ }
43
+ export interface FeatureDefinitionSeed {
44
+ featureKey: string;
45
+ packageName: string;
46
+ qualifiedClassName: string;
47
+ className: string;
48
+ localId: string;
49
+ defaultEnabled: boolean;
50
+ label?: string;
51
+ description?: string;
52
+ metadata?: FeatureMetadata;
53
+ visibility?: string;
54
+ }
55
+ export interface SyncDefinitionsOptions {
56
+ classNames?: string[];
57
+ constructors?: FeatureTargetConstructor[];
58
+ pruneStale?: boolean;
59
+ }
60
+ export interface SyncManifestOptions {
61
+ pruneStale?: boolean;
62
+ }
63
+ export interface FeatureSyncResult {
64
+ total: number;
65
+ created: number;
66
+ updated: number;
67
+ unchanged: number;
68
+ deleted: number;
69
+ featureKeys: string[];
70
+ }
71
+ export interface FeatureResolutionContext {
72
+ tenantId?: string;
73
+ }
74
+ export interface FeatureTenantNode {
75
+ id: string;
76
+ inheritPermissions: boolean;
77
+ cascadePermissions: boolean;
78
+ }
79
+ export interface FeatureTenantHierarchyProvider {
80
+ getChain(tenantId: string): Promise<FeatureTenantNode[]>;
81
+ }
82
+ export type FeatureTenantHierarchyLoader = (options: SmrtClassOptions) => Promise<FeatureTenantHierarchyProvider | null>;
83
+ export interface FeatureResolverOptions {
84
+ tenantHierarchyLoader?: FeatureTenantHierarchyLoader;
85
+ }
86
+ /**
87
+ * Minimal structural shape of a tenant record returned by
88
+ * `@happyvertical/smrt-users`. Only the permission-cascade fields consumed by
89
+ * feature resolution are modeled; everything else is left unconstrained.
90
+ */
91
+ export interface FeatureUsersTenantRecord {
92
+ id: string;
93
+ inheritPermissions?: boolean;
94
+ cascadePermissions?: boolean;
95
+ }
96
+ export interface FeatureUsersModule {
97
+ TenantCollection: {
98
+ create(options: SmrtClassOptions): Promise<{
99
+ get(criteria: {
100
+ id: string;
101
+ }): Promise<FeatureUsersTenantRecord | null>;
102
+ getAncestorsFromRoot(tenantId: string): Promise<FeatureUsersTenantRecord[]>;
103
+ }>;
104
+ };
105
+ }
106
+ export type { SmartObjectManifest, SmrtClassOptions };
107
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import { SmartObjectConfig } from '@happyvertical/smrt-core';
2
+ import { SmartObjectManifest } from '@happyvertical/smrt-core/manifest';
3
+ import { FeatureDefinitionSeed, FeatureMetadata, FeatureTargetConstructor } from './types.js';
4
+ export type RegistryEntryLike = {
5
+ name: string;
6
+ qualifiedName?: string;
7
+ packageName?: string;
8
+ config: SmartObjectConfig;
9
+ visibility?: string;
10
+ };
11
+ export declare function createFeatureKey(qualifiedClassName: string, localId: string): string;
12
+ export declare function parseFeatureKey(featureKey: string): {
13
+ qualifiedClassName: string;
14
+ localId: string;
15
+ };
16
+ export declare function serializeFeatureMetadata(metadata: FeatureMetadata | string | null | undefined): string;
17
+ export declare function parseFeatureMetadata(metadata: string | null | undefined): FeatureMetadata;
18
+ export declare function getQualifiedClassNameFromRegistry(registration: RegistryEntryLike): string | null;
19
+ export declare function getPackageNameFromRegistry(registration: RegistryEntryLike): string | null;
20
+ export declare function extractFeatureSeedsFromRegistryEntry(registration: RegistryEntryLike): FeatureDefinitionSeed[];
21
+ export declare function extractFeatureSeedsFromManifest(manifest: SmartObjectManifest): FeatureDefinitionSeed[];
22
+ export declare function extractTouchedPackagesFromManifest(manifest: SmartObjectManifest): Set<string>;
23
+ export declare function resolveFeatureKeyForTarget(classOrInstance: object | FeatureTargetConstructor, localId: string): {
24
+ featureKey: string;
25
+ defaultEnabled: boolean;
26
+ };
27
+ export declare function findFeatureDefaultInRegistry(featureKey: string): boolean | undefined;
28
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,iBAAiB,EACvB,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAEV,mBAAmB,EACpB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,KAAK,EACV,qBAAqB,EACrB,eAAe,EACf,wBAAwB,EACzB,MAAM,YAAY,CAAC;AAEpB,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,iBAAiB,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,wBAAgB,gBAAgB,CAC9B,kBAAkB,EAAE,MAAM,EAC1B,OAAO,EAAE,MAAM,GACd,MAAM,CAkBR;AAED,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG;IACnD,kBAAkB,EAAE,MAAM,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;CACjB,CAkBA;AAED,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,eAAe,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,GACpD,MAAM,CAiBR;AAED,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAClC,eAAe,CAUjB;AAgCD,wBAAgB,iCAAiC,CAC/C,YAAY,EAAE,iBAAiB,GAC9B,MAAM,GAAG,IAAI,CAaf;AAED,wBAAgB,0BAA0B,CACxC,YAAY,EAAE,iBAAiB,GAC9B,MAAM,GAAG,IAAI,CAWf;AAED,wBAAgB,oCAAoC,CAClD,YAAY,EAAE,iBAAiB,GAC9B,qBAAqB,EAAE,CA+BzB;AAED,wBAAgB,+BAA+B,CAC7C,QAAQ,EAAE,mBAAmB,GAC5B,qBAAqB,EAAE,CAQzB;AAED,wBAAgB,kCAAkC,CAChD,QAAQ,EAAE,mBAAmB,GAC5B,GAAG,CAAC,MAAM,CAAC,CA2Bb;AA8DD,wBAAgB,0BAA0B,CACxC,eAAe,EAAE,MAAM,GAAG,wBAAwB,EAClD,OAAO,EAAE,MAAM,GACd;IACD,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,OAAO,CAAC;CACzB,CA+BA;AAED,wBAAgB,4BAA4B,CAC1C,UAAU,EAAE,MAAM,GACjB,OAAO,GAAG,SAAS,CAQrB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@happyvertical/smrt-features",
3
- "version": "0.51.19",
3
+ "version": "0.51.21",
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",
@@ -15,17 +15,28 @@
15
15
  "types": "./dist/index.d.ts",
16
16
  "import": "./dist/index.js"
17
17
  },
18
+ "./svelte": {
19
+ "types": "./dist/svelte/index.d.ts",
20
+ "svelte": "./dist/svelte/index.js",
21
+ "import": "./dist/svelte/index.js"
22
+ },
18
23
  "./manifest": "./dist/manifest.json",
19
24
  "./manifest.json": "./dist/manifest.json"
20
25
  },
21
26
  "dependencies": {
22
- "@happyvertical/smrt-core": "0.51.19"
27
+ "@happyvertical/smrt-core": "0.51.21",
28
+ "@happyvertical/smrt-ui": "0.51.21"
23
29
  },
24
30
  "devDependencies": {
25
- "@happyvertical/smrt-cli": "0.51.19",
26
- "@happyvertical/smrt-users": "0.51.19",
27
- "@happyvertical/smrt-vitest": "0.51.19",
31
+ "@happyvertical/smrt-cli": "0.51.21",
32
+ "@happyvertical/smrt-users": "0.51.21",
33
+ "@happyvertical/smrt-vitest": "0.51.21",
34
+ "@sveltejs/package": "^2.5.8",
35
+ "@sveltejs/vite-plugin-svelte": "^7.3.0",
28
36
  "@types/node": "24.13.6",
37
+ "jsdom": "^29.1.1",
38
+ "svelte": "^5.57.1",
39
+ "svelte-check": "^4.7.6",
29
40
  "typescript": "5.9.3",
30
41
  "vite": "8.1.4",
31
42
  "vitest": "4.1.10"
@@ -48,14 +59,22 @@
48
59
  "url": "https://github.com/happyvertical/smrt.git",
49
60
  "directory": "packages/features"
50
61
  },
62
+ "peerDependencies": {
63
+ "svelte": "^5.57.1"
64
+ },
65
+ "peerDependenciesMeta": {
66
+ "svelte": {
67
+ "optional": true
68
+ }
69
+ },
51
70
  "scripts": {
52
- "build": "vite build --mode library",
71
+ "build": "vite build --mode library && svelte-package -i src/svelte -o dist/svelte --tsconfig tsconfig.svelte.json && node ../../scripts/prune-svelte-package-artifacts.js dist/svelte",
53
72
  "build:watch": "vite build --mode library --watch",
54
73
  "clean": "rm -rf dist",
55
74
  "dev": "vite dev",
56
75
  "test": "vitest run",
57
76
  "test:watch": "vitest",
58
- "typecheck": "tsc --noEmit -p tsconfig.json",
77
+ "typecheck": "tsc --noEmit -p tsconfig.json && node ../../scripts/svelte-check-a11y.mjs --tsconfig ./tsconfig.svelte.json",
59
78
  "verify:pack": "node ../../scripts/verify-package-types-exports.js ."
60
79
  }
61
80
  }