@flagshark/core 1.0.0

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 (105) hide show
  1. package/dist/detection/config-adapter.d.ts +16 -0
  2. package/dist/detection/config-adapter.d.ts.map +1 -0
  3. package/dist/detection/config-adapter.js +60 -0
  4. package/dist/detection/config-adapter.js.map +1 -0
  5. package/dist/detection/detectors/cpp.d.ts +17 -0
  6. package/dist/detection/detectors/cpp.d.ts.map +1 -0
  7. package/dist/detection/detectors/cpp.js +113 -0
  8. package/dist/detection/detectors/cpp.js.map +1 -0
  9. package/dist/detection/detectors/csharp.d.ts +17 -0
  10. package/dist/detection/detectors/csharp.d.ts.map +1 -0
  11. package/dist/detection/detectors/csharp.js +258 -0
  12. package/dist/detection/detectors/csharp.js.map +1 -0
  13. package/dist/detection/detectors/go.d.ts +17 -0
  14. package/dist/detection/detectors/go.d.ts.map +1 -0
  15. package/dist/detection/detectors/go.js +319 -0
  16. package/dist/detection/detectors/go.js.map +1 -0
  17. package/dist/detection/detectors/index.d.ts +14 -0
  18. package/dist/detection/detectors/index.d.ts.map +1 -0
  19. package/dist/detection/detectors/index.js +14 -0
  20. package/dist/detection/detectors/index.js.map +1 -0
  21. package/dist/detection/detectors/java.d.ts +17 -0
  22. package/dist/detection/detectors/java.d.ts.map +1 -0
  23. package/dist/detection/detectors/java.js +264 -0
  24. package/dist/detection/detectors/java.js.map +1 -0
  25. package/dist/detection/detectors/javascript.d.ts +18 -0
  26. package/dist/detection/detectors/javascript.d.ts.map +1 -0
  27. package/dist/detection/detectors/javascript.js +32 -0
  28. package/dist/detection/detectors/javascript.js.map +1 -0
  29. package/dist/detection/detectors/kotlin.d.ts +17 -0
  30. package/dist/detection/detectors/kotlin.d.ts.map +1 -0
  31. package/dist/detection/detectors/kotlin.js +210 -0
  32. package/dist/detection/detectors/kotlin.js.map +1 -0
  33. package/dist/detection/detectors/objectivec.d.ts +17 -0
  34. package/dist/detection/detectors/objectivec.d.ts.map +1 -0
  35. package/dist/detection/detectors/objectivec.js +244 -0
  36. package/dist/detection/detectors/objectivec.js.map +1 -0
  37. package/dist/detection/detectors/php.d.ts +17 -0
  38. package/dist/detection/detectors/php.d.ts.map +1 -0
  39. package/dist/detection/detectors/php.js +210 -0
  40. package/dist/detection/detectors/php.js.map +1 -0
  41. package/dist/detection/detectors/python.d.ts +17 -0
  42. package/dist/detection/detectors/python.d.ts.map +1 -0
  43. package/dist/detection/detectors/python.js +284 -0
  44. package/dist/detection/detectors/python.js.map +1 -0
  45. package/dist/detection/detectors/ruby.d.ts +17 -0
  46. package/dist/detection/detectors/ruby.d.ts.map +1 -0
  47. package/dist/detection/detectors/ruby.js +259 -0
  48. package/dist/detection/detectors/ruby.js.map +1 -0
  49. package/dist/detection/detectors/rust.d.ts +17 -0
  50. package/dist/detection/detectors/rust.d.ts.map +1 -0
  51. package/dist/detection/detectors/rust.js +159 -0
  52. package/dist/detection/detectors/rust.js.map +1 -0
  53. package/dist/detection/detectors/swift.d.ts +17 -0
  54. package/dist/detection/detectors/swift.d.ts.map +1 -0
  55. package/dist/detection/detectors/swift.js +229 -0
  56. package/dist/detection/detectors/swift.js.map +1 -0
  57. package/dist/detection/detectors/typescript.d.ts +17 -0
  58. package/dist/detection/detectors/typescript.d.ts.map +1 -0
  59. package/dist/detection/detectors/typescript.js +350 -0
  60. package/dist/detection/detectors/typescript.js.map +1 -0
  61. package/dist/detection/feature-flag.d.ts +16 -0
  62. package/dist/detection/feature-flag.d.ts.map +1 -0
  63. package/dist/detection/feature-flag.js +2 -0
  64. package/dist/detection/feature-flag.js.map +1 -0
  65. package/dist/detection/helpers.d.ts +51 -0
  66. package/dist/detection/helpers.d.ts.map +1 -0
  67. package/dist/detection/helpers.js +266 -0
  68. package/dist/detection/helpers.js.map +1 -0
  69. package/dist/detection/index.d.ts +19 -0
  70. package/dist/detection/index.d.ts.map +1 -0
  71. package/dist/detection/index.js +53 -0
  72. package/dist/detection/index.js.map +1 -0
  73. package/dist/detection/interface.d.ts +76 -0
  74. package/dist/detection/interface.d.ts.map +1 -0
  75. package/dist/detection/interface.js +25 -0
  76. package/dist/detection/interface.js.map +1 -0
  77. package/dist/detection/polyglot-analyzer.d.ts +83 -0
  78. package/dist/detection/polyglot-analyzer.d.ts.map +1 -0
  79. package/dist/detection/polyglot-analyzer.js +245 -0
  80. package/dist/detection/polyglot-analyzer.js.map +1 -0
  81. package/dist/detection/registry.d.ts +31 -0
  82. package/dist/detection/registry.d.ts.map +1 -0
  83. package/dist/detection/registry.js +68 -0
  84. package/dist/detection/registry.js.map +1 -0
  85. package/dist/detection/yaml-config.d.ts +333 -0
  86. package/dist/detection/yaml-config.d.ts.map +1 -0
  87. package/dist/detection/yaml-config.js +215 -0
  88. package/dist/detection/yaml-config.js.map +1 -0
  89. package/dist/index.d.ts +8 -0
  90. package/dist/index.d.ts.map +1 -0
  91. package/dist/index.js +9 -0
  92. package/dist/index.js.map +1 -0
  93. package/dist/scan-repo.d.ts +67 -0
  94. package/dist/scan-repo.d.ts.map +1 -0
  95. package/dist/scan-repo.js +55 -0
  96. package/dist/scan-repo.js.map +1 -0
  97. package/dist/scanner.d.ts +18 -0
  98. package/dist/scanner.d.ts.map +1 -0
  99. package/dist/scanner.js +108 -0
  100. package/dist/scanner.js.map +1 -0
  101. package/dist/staleness.d.ts +30 -0
  102. package/dist/staleness.d.ts.map +1 -0
  103. package/dist/staleness.js +217 -0
  104. package/dist/staleness.js.map +1 -0
  105. package/package.json +37 -0
@@ -0,0 +1,229 @@
1
+ /**
2
+ * Swift language feature flag detector.
3
+ * Ported from Go: internal/languages/swift/detector.go
4
+ */
5
+ import { detectFlagsWithRegex } from '../helpers.js';
6
+ import { Languages } from '../interface.js';
7
+ export class SwiftDetector {
8
+ providers;
9
+ constructor(providers) {
10
+ this.providers = providers ?? defaultSwiftProviders();
11
+ }
12
+ language() {
13
+ return Languages.Swift;
14
+ }
15
+ fileExtensions() {
16
+ return ['.swift'];
17
+ }
18
+ supportsFile(filename) {
19
+ return filename.toLowerCase().endsWith('.swift');
20
+ }
21
+ detectFlags(filename, content) {
22
+ return detectFlagsWithRegex(filename, content, this.language(), this.providers);
23
+ }
24
+ getProviders() {
25
+ return this.providers;
26
+ }
27
+ }
28
+ export function defaultSwiftProviders() {
29
+ return [
30
+ {
31
+ name: 'LaunchDarkly iOS SDK',
32
+ importPattern: 'LaunchDarkly',
33
+ description: 'LaunchDarkly iOS/macOS/tvOS SDK',
34
+ enabled: true,
35
+ methods: [
36
+ {
37
+ name: 'variation',
38
+ flagKeyIndex: 0,
39
+ examples: ['LDClient.get()!.variation(forKey: "flag-key", defaultValue: false)'],
40
+ },
41
+ {
42
+ name: 'boolVariation',
43
+ flagKeyIndex: 0,
44
+ examples: ['client.boolVariation(forKey: "flag-key", defaultValue: false)'],
45
+ },
46
+ {
47
+ name: 'stringVariation',
48
+ flagKeyIndex: 0,
49
+ examples: ['client.stringVariation(forKey: "flag-key", defaultValue: "")'],
50
+ },
51
+ ],
52
+ },
53
+ {
54
+ name: 'Unleash iOS SDK',
55
+ importPattern: 'UnleashProxyClientSwift',
56
+ description: 'Unleash iOS SDK',
57
+ enabled: true,
58
+ methods: [
59
+ {
60
+ name: 'isEnabled',
61
+ flagKeyIndex: 0,
62
+ examples: ['unleash.isEnabled(name: "feature-toggle")'],
63
+ },
64
+ {
65
+ name: 'getVariant',
66
+ flagKeyIndex: 0,
67
+ examples: ['unleash.getVariant(name: "feature-toggle")'],
68
+ },
69
+ ],
70
+ },
71
+ {
72
+ name: 'Split.io iOS SDK',
73
+ importPattern: 'Split',
74
+ description: 'Split.io iOS SDK',
75
+ enabled: true,
76
+ methods: [
77
+ { name: 'getTreatment', flagKeyIndex: 0, examples: ['client.getTreatment("split-name")'] },
78
+ ],
79
+ },
80
+ {
81
+ name: 'Optimizely iOS SDK',
82
+ importPattern: 'Optimizely',
83
+ description: 'Optimizely Feature Experimentation iOS SDK',
84
+ enabled: true,
85
+ methods: [
86
+ { name: 'decide', flagKeyIndex: 0, examples: ['user.decide(key: "flag-key")'] },
87
+ {
88
+ name: 'isFeatureEnabled',
89
+ flagKeyIndex: 0,
90
+ examples: ['optimizely.isFeatureEnabled(featureKey: "feature-key", userId: userId)'],
91
+ },
92
+ ],
93
+ },
94
+ {
95
+ name: 'Flagsmith iOS SDK',
96
+ importPattern: 'FlagsmithClient',
97
+ description: 'Flagsmith iOS SDK',
98
+ enabled: true,
99
+ methods: [
100
+ {
101
+ name: 'hasFeatureFlag',
102
+ flagKeyIndex: 0,
103
+ examples: ['Flagsmith.shared.hasFeatureFlag(withID: "feature-name")'],
104
+ },
105
+ {
106
+ name: 'getValueForFeature',
107
+ flagKeyIndex: 0,
108
+ examples: ['Flagsmith.shared.getValueForFeature(withID: "feature-name")'],
109
+ },
110
+ ],
111
+ },
112
+ {
113
+ name: 'ConfigCat iOS SDK',
114
+ importPattern: 'ConfigCat',
115
+ description: 'ConfigCat iOS SDK',
116
+ enabled: true,
117
+ methods: [
118
+ {
119
+ name: 'getValue',
120
+ flagKeyIndex: 0,
121
+ examples: ['client.getValue(for: "flag-key", defaultValue: false)'],
122
+ },
123
+ ],
124
+ },
125
+ {
126
+ name: 'Statsig iOS SDK',
127
+ importPattern: 'StatsigOnDeviceEvaluations',
128
+ description: 'Statsig iOS/Swift SDK',
129
+ enabled: true,
130
+ methods: [
131
+ { name: 'checkGate', flagKeyIndex: 0, examples: ['statsig.checkGate("gate-name")'] },
132
+ {
133
+ name: 'getExperiment',
134
+ flagKeyIndex: 0,
135
+ examples: ['statsig.getExperiment("experiment-name")'],
136
+ },
137
+ { name: 'getConfig', flagKeyIndex: 0, examples: ['statsig.getConfig("config-name")'] },
138
+ ],
139
+ },
140
+ {
141
+ name: 'GrowthBook iOS SDK',
142
+ importPattern: 'GrowthBook',
143
+ description: 'GrowthBook iOS/Swift SDK',
144
+ enabled: true,
145
+ methods: [
146
+ { name: 'isOn', flagKeyIndex: 0, examples: ['gb.isOn(feature: "feature-key")'] },
147
+ {
148
+ name: 'getFeatureValue',
149
+ flagKeyIndex: 0,
150
+ examples: ['gb.getFeatureValue(feature: "feature-key", default: JSON("blue"))'],
151
+ },
152
+ ],
153
+ },
154
+ {
155
+ name: 'DevCycle iOS SDK',
156
+ importPattern: 'DevCycle',
157
+ description: 'DevCycle iOS/Swift SDK',
158
+ enabled: true,
159
+ methods: [
160
+ {
161
+ name: 'variableValue',
162
+ flagKeyIndex: 0,
163
+ examples: ['client.variableValue(key: "variable-key", defaultValue: false)'],
164
+ },
165
+ { name: 'variable', flagKeyIndex: 0, examples: ['client.variable(key: "variable-key")'] },
166
+ ],
167
+ },
168
+ {
169
+ name: 'Eppo iOS SDK',
170
+ importPattern: 'EppoClient',
171
+ description: 'Eppo iOS/Swift SDK',
172
+ enabled: true,
173
+ methods: [
174
+ {
175
+ name: 'getBoolAssignment',
176
+ flagKeyIndex: 0,
177
+ examples: [
178
+ 'eppoClient.getBoolAssignment(flagKey: "flag-key", subjectKey: subjectKey, defaultValue: false)',
179
+ ],
180
+ },
181
+ {
182
+ name: 'getStringAssignment',
183
+ flagKeyIndex: 0,
184
+ examples: [
185
+ 'eppoClient.getStringAssignment(flagKey: "flag-key", subjectKey: subjectKey, defaultValue: "")',
186
+ ],
187
+ },
188
+ ],
189
+ },
190
+ {
191
+ name: 'PostHog iOS SDK',
192
+ importPattern: 'PostHog',
193
+ description: 'PostHog iOS/Swift SDK',
194
+ enabled: true,
195
+ methods: [
196
+ {
197
+ name: 'isFeatureEnabled',
198
+ flagKeyIndex: 0,
199
+ examples: ['PostHogSDK.shared.isFeatureEnabled("flag-key")'],
200
+ },
201
+ {
202
+ name: 'getFeatureFlag',
203
+ flagKeyIndex: 0,
204
+ examples: ['PostHogSDK.shared.getFeatureFlag("flag-key")'],
205
+ },
206
+ {
207
+ name: 'getFeatureFlagPayload',
208
+ flagKeyIndex: 0,
209
+ examples: ['PostHogSDK.shared.getFeatureFlagPayload("flag-key")'],
210
+ },
211
+ ],
212
+ },
213
+ {
214
+ name: 'Custom Feature Flags',
215
+ description: 'Common custom Swift feature flag patterns',
216
+ enabled: true,
217
+ methods: [
218
+ {
219
+ name: 'isFeatureEnabled',
220
+ flagKeyIndex: 0,
221
+ examples: ['isFeatureEnabled("feature-name")'],
222
+ },
223
+ { name: 'checkFeature', flagKeyIndex: 0, examples: ['checkFeature("feature-name")'] },
224
+ { name: 'hasFeature', flagKeyIndex: 0, examples: ['hasFeature("feature-name")'] },
225
+ ],
226
+ },
227
+ ];
228
+ }
229
+ //# sourceMappingURL=swift.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"swift.js","sourceRoot":"","sources":["../../../src/detection/detectors/swift.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * TypeScript language feature flag detector.
3
+ * Ported from Go: internal/languages/typescript/detector.go
4
+ */
5
+ import type { FeatureFlag } from '../feature-flag.js';
6
+ import type { FeatureFlagProvider, Language, LanguageDetector } from '../interface.js';
7
+ export declare class TypeScriptDetector implements LanguageDetector {
8
+ private readonly providers;
9
+ constructor(providers?: FeatureFlagProvider[]);
10
+ language(): Language;
11
+ fileExtensions(): string[];
12
+ supportsFile(filename: string): boolean;
13
+ detectFlags(filename: string, content: string): FeatureFlag[];
14
+ getProviders(): FeatureFlagProvider[];
15
+ }
16
+ export declare function defaultTypeScriptProviders(): FeatureFlagProvider[];
17
+ //# sourceMappingURL=typescript.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typescript.d.ts","sourceRoot":"","sources":["../../../src/detection/detectors/typescript.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AACrD,OAAO,KAAK,EAAE,mBAAmB,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAEtF,qBAAa,kBAAmB,YAAW,gBAAgB;IACzD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAuB;gBAErC,SAAS,CAAC,EAAE,mBAAmB,EAAE;IAI7C,QAAQ,IAAI,QAAQ;IAIpB,cAAc,IAAI,MAAM,EAAE;IAI1B,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAKvC,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,WAAW,EAAE;IAI7D,YAAY,IAAI,mBAAmB,EAAE;CAGtC;AAED,wBAAgB,0BAA0B,IAAI,mBAAmB,EAAE,CAgUlE"}
@@ -0,0 +1,350 @@
1
+ /**
2
+ * TypeScript language feature flag detector.
3
+ * Ported from Go: internal/languages/typescript/detector.go
4
+ */
5
+ import { detectFlagsWithRegex } from '../helpers.js';
6
+ import { Languages } from '../interface.js';
7
+ export class TypeScriptDetector {
8
+ providers;
9
+ constructor(providers) {
10
+ this.providers = providers ?? defaultTypeScriptProviders();
11
+ }
12
+ language() {
13
+ return Languages.TypeScript;
14
+ }
15
+ fileExtensions() {
16
+ return ['.ts', '.tsx', '.js', '.jsx', '.mjs', '.cjs'];
17
+ }
18
+ supportsFile(filename) {
19
+ const ext = filename.toLowerCase().split('.').pop();
20
+ return ['ts', 'tsx', 'js', 'jsx', 'mjs', 'cjs'].includes(ext ?? '');
21
+ }
22
+ detectFlags(filename, content) {
23
+ return detectFlagsWithRegex(filename, content, this.language(), this.providers);
24
+ }
25
+ getProviders() {
26
+ return this.providers;
27
+ }
28
+ }
29
+ export function defaultTypeScriptProviders() {
30
+ return [
31
+ {
32
+ name: 'LaunchDarkly JavaScript SDK',
33
+ importPattern: '@launchdarkly/js-client-sdk',
34
+ description: 'LaunchDarkly JavaScript/TypeScript SDK',
35
+ enabled: true,
36
+ methods: [
37
+ {
38
+ name: 'variation',
39
+ flagKeyIndex: 0,
40
+ examples: ['client.variation("flag-key", defaultValue)'],
41
+ },
42
+ {
43
+ name: 'boolVariation',
44
+ flagKeyIndex: 0,
45
+ examples: ['client.boolVariation("flag-key", false)'],
46
+ },
47
+ ],
48
+ },
49
+ {
50
+ name: 'LaunchDarkly Node Server SDK',
51
+ importPattern: '@launchdarkly/node-server-sdk',
52
+ description: 'LaunchDarkly Node.js Server SDK',
53
+ enabled: true,
54
+ methods: [
55
+ {
56
+ name: 'variation',
57
+ flagKeyIndex: 0,
58
+ examples: ['client.variation("flag-key", context, defaultValue)'],
59
+ },
60
+ {
61
+ name: 'boolVariation',
62
+ flagKeyIndex: 0,
63
+ examples: ['client.boolVariation("flag-key", context, false)'],
64
+ },
65
+ {
66
+ name: 'stringVariation',
67
+ flagKeyIndex: 0,
68
+ examples: ['client.stringVariation("flag-key", context, "default")'],
69
+ },
70
+ {
71
+ name: 'intVariation',
72
+ flagKeyIndex: 0,
73
+ examples: ['client.intVariation("flag-key", context, 0)'],
74
+ },
75
+ {
76
+ name: 'doubleVariation',
77
+ flagKeyIndex: 0,
78
+ examples: ['client.doubleVariation("flag-key", context, 0.0)'],
79
+ },
80
+ {
81
+ name: 'jsonVariation',
82
+ flagKeyIndex: 0,
83
+ examples: ['client.jsonVariation("flag-key", context, {})'],
84
+ },
85
+ {
86
+ name: 'variationDetail',
87
+ flagKeyIndex: 0,
88
+ examples: ['client.variationDetail("flag-key", context, defaultValue)'],
89
+ },
90
+ ],
91
+ },
92
+ {
93
+ name: 'LaunchDarkly React SDK',
94
+ importPattern: '@launchdarkly/react-client-sdk',
95
+ description: 'LaunchDarkly React SDK',
96
+ enabled: true,
97
+ methods: [
98
+ { name: 'useFlags', flagKeyIndex: -1, examples: ['const { flagKey } = useFlags()'] },
99
+ { name: 'useLDClient', flagKeyIndex: -1, examples: ['const ldClient = useLDClient()'] },
100
+ ],
101
+ },
102
+ {
103
+ name: 'LaunchDarkly Legacy Node SDK',
104
+ importPattern: 'launchdarkly-node-server-sdk',
105
+ description: 'LaunchDarkly legacy Node.js Server SDK',
106
+ enabled: true,
107
+ methods: [
108
+ {
109
+ name: 'variation',
110
+ flagKeyIndex: 0,
111
+ examples: ['client.variation("flag-key", context, defaultValue)'],
112
+ },
113
+ {
114
+ name: 'boolVariation',
115
+ flagKeyIndex: 0,
116
+ examples: ['client.boolVariation("flag-key", context, false)'],
117
+ },
118
+ ],
119
+ },
120
+ {
121
+ name: 'Unleash JavaScript SDK',
122
+ importPattern: 'unleash-client',
123
+ description: 'Unleash JavaScript/TypeScript SDK',
124
+ enabled: true,
125
+ methods: [
126
+ { name: 'isEnabled', flagKeyIndex: 0, examples: ['unleash.isEnabled("feature-toggle")'] },
127
+ { name: 'getVariant', flagKeyIndex: 0, examples: ['unleash.getVariant("feature-toggle")'] },
128
+ ],
129
+ },
130
+ {
131
+ name: 'Split.io JavaScript SDK',
132
+ importPattern: '@splitsoftware/splitio',
133
+ description: 'Split.io JavaScript/TypeScript SDK',
134
+ enabled: true,
135
+ methods: [
136
+ {
137
+ name: 'getTreatment',
138
+ flagKeyIndex: 1,
139
+ examples: ['client.getTreatment(key, "split-name")'],
140
+ },
141
+ ],
142
+ },
143
+ {
144
+ name: 'React Feature Flags',
145
+ importPattern: 'react-feature-flags',
146
+ description: 'React feature flags library',
147
+ enabled: true,
148
+ methods: [{ name: 'Flag', flagKeyIndex: 0, examples: ['<Flag name="new-feature">'] }],
149
+ },
150
+ {
151
+ name: 'Optimizely JavaScript SDK',
152
+ importPattern: '@optimizely/optimizely-sdk',
153
+ description: 'Optimizely Feature Experimentation JavaScript/TypeScript SDK',
154
+ enabled: true,
155
+ methods: [
156
+ { name: 'decide', flagKeyIndex: 0, examples: ['user.decide("flag-key", options)'] },
157
+ {
158
+ name: 'decideForKeys',
159
+ flagKeyIndex: 0,
160
+ examples: ['user.decideForKeys(["flag-key-1", "flag-key-2"], options)'],
161
+ },
162
+ { name: 'decideAll', flagKeyIndex: 0, examples: ['user.decideAll(options)'] },
163
+ ],
164
+ },
165
+ {
166
+ name: 'Flagsmith JavaScript SDK',
167
+ importPattern: 'flagsmith',
168
+ description: 'Flagsmith JavaScript/TypeScript SDK',
169
+ enabled: true,
170
+ methods: [
171
+ { name: 'hasFeature', flagKeyIndex: 0, examples: ['flagsmith.hasFeature("feature-name")'] },
172
+ { name: 'getValue', flagKeyIndex: 0, examples: ['flagsmith.getValue("feature-name")'] },
173
+ ],
174
+ },
175
+ {
176
+ name: 'ConfigCat JavaScript SDK',
177
+ importPattern: 'configcat-js',
178
+ description: 'ConfigCat JavaScript/TypeScript SDK',
179
+ enabled: true,
180
+ methods: [
181
+ {
182
+ name: 'getValue',
183
+ flagKeyIndex: 0,
184
+ examples: ['client.getValue("flag-key", defaultValue)'],
185
+ },
186
+ {
187
+ name: 'getValueAsync',
188
+ flagKeyIndex: 0,
189
+ examples: ['await client.getValueAsync("flag-key", defaultValue)'],
190
+ },
191
+ ],
192
+ },
193
+ {
194
+ name: 'Flipt JavaScript SDK',
195
+ importPattern: '@flipt-io/flipt-client-js',
196
+ description: 'Flipt JavaScript/TypeScript SDK',
197
+ enabled: true,
198
+ methods: [
199
+ {
200
+ name: 'evaluateBoolean',
201
+ flagKeyIndex: 0,
202
+ examples: ['client.evaluateBoolean("flag-key", entityId, context)'],
203
+ },
204
+ {
205
+ name: 'evaluateVariant',
206
+ flagKeyIndex: 0,
207
+ examples: ['client.evaluateVariant("flag-key", entityId, context)'],
208
+ },
209
+ ],
210
+ },
211
+ {
212
+ name: 'Statsig JavaScript SDK',
213
+ importPattern: 'statsig-js',
214
+ description: 'Statsig JavaScript/TypeScript SDK',
215
+ enabled: true,
216
+ methods: [
217
+ { name: 'checkGate', flagKeyIndex: 0, examples: ['statsig.checkGate("gate-name")'] },
218
+ {
219
+ name: 'getExperiment',
220
+ flagKeyIndex: 0,
221
+ examples: ['statsig.getExperiment("experiment-name")'],
222
+ },
223
+ { name: 'getConfig', flagKeyIndex: 0, examples: ['statsig.getConfig("config-name")'] },
224
+ ],
225
+ },
226
+ {
227
+ name: 'GrowthBook JavaScript SDK',
228
+ importPattern: '@growthbook/growthbook',
229
+ description: 'GrowthBook JavaScript/TypeScript SDK',
230
+ enabled: true,
231
+ methods: [
232
+ { name: 'isOn', flagKeyIndex: 0, examples: ['gb.isOn("feature-key")'] },
233
+ {
234
+ name: 'getFeatureValue',
235
+ flagKeyIndex: 0,
236
+ examples: ['gb.getFeatureValue("feature-key", fallbackValue)'],
237
+ },
238
+ { name: 'evalFeature', flagKeyIndex: 0, examples: ['gb.evalFeature("feature-key")'] },
239
+ ],
240
+ },
241
+ {
242
+ name: 'DevCycle JavaScript SDK',
243
+ importPattern: '@devcycle/js-client-sdk',
244
+ description: 'DevCycle JavaScript/TypeScript SDK',
245
+ enabled: true,
246
+ methods: [
247
+ {
248
+ name: 'variableValue',
249
+ flagKeyIndex: 0,
250
+ examples: ['client.variableValue("variable-key", defaultValue)'],
251
+ },
252
+ {
253
+ name: 'variable',
254
+ flagKeyIndex: 0,
255
+ examples: ['client.variable("variable-key", defaultValue)'],
256
+ },
257
+ ],
258
+ },
259
+ {
260
+ name: 'Eppo JavaScript SDK',
261
+ importPattern: '@eppo/js-client-sdk',
262
+ description: 'Eppo JavaScript/TypeScript SDK',
263
+ enabled: true,
264
+ methods: [
265
+ {
266
+ name: 'getBooleanAssignment',
267
+ flagKeyIndex: 0,
268
+ examples: ['eppoClient.getBooleanAssignment("flag-key", subjectKey, defaultValue)'],
269
+ },
270
+ {
271
+ name: 'getStringAssignment',
272
+ flagKeyIndex: 0,
273
+ examples: ['eppoClient.getStringAssignment("flag-key", subjectKey, defaultValue)'],
274
+ },
275
+ {
276
+ name: 'getNumericAssignment',
277
+ flagKeyIndex: 0,
278
+ examples: ['eppoClient.getNumericAssignment("flag-key", subjectKey, defaultValue)'],
279
+ },
280
+ {
281
+ name: 'getJSONAssignment',
282
+ flagKeyIndex: 0,
283
+ examples: ['eppoClient.getJSONAssignment("flag-key", subjectKey, defaultValue)'],
284
+ },
285
+ ],
286
+ },
287
+ {
288
+ name: 'PostHog JavaScript SDK',
289
+ importPattern: 'posthog-js',
290
+ description: 'PostHog JavaScript/TypeScript SDK',
291
+ enabled: true,
292
+ methods: [
293
+ {
294
+ name: 'isFeatureEnabled',
295
+ flagKeyIndex: 0,
296
+ examples: ['posthog.isFeatureEnabled("flag-key")'],
297
+ },
298
+ {
299
+ name: 'getFeatureFlag',
300
+ flagKeyIndex: 0,
301
+ examples: ['posthog.getFeatureFlag("flag-key")'],
302
+ },
303
+ {
304
+ name: 'getFeatureFlagPayload',
305
+ flagKeyIndex: 0,
306
+ examples: ['posthog.getFeatureFlagPayload("flag-key")'],
307
+ },
308
+ ],
309
+ },
310
+ {
311
+ name: 'PostHog Node SDK',
312
+ importPattern: 'posthog-node',
313
+ description: 'PostHog Node.js SDK',
314
+ enabled: true,
315
+ methods: [
316
+ {
317
+ name: 'isFeatureEnabled',
318
+ flagKeyIndex: 0,
319
+ examples: ['posthog.isFeatureEnabled("flag-key", distinctId)'],
320
+ },
321
+ {
322
+ name: 'getFeatureFlag',
323
+ flagKeyIndex: 0,
324
+ examples: ['posthog.getFeatureFlag("flag-key", distinctId)'],
325
+ },
326
+ {
327
+ name: 'getFeatureFlagPayload',
328
+ flagKeyIndex: 0,
329
+ examples: ['posthog.getFeatureFlagPayload("flag-key", distinctId)'],
330
+ },
331
+ { name: 'getAllFlags', flagKeyIndex: -1, examples: ['posthog.getAllFlags(distinctId)'] },
332
+ ],
333
+ },
334
+ {
335
+ name: 'Custom Feature Flags',
336
+ description: 'Common custom feature flag patterns',
337
+ enabled: true,
338
+ methods: [
339
+ {
340
+ name: 'isFeatureEnabled',
341
+ flagKeyIndex: 0,
342
+ examples: ['isFeatureEnabled("feature-name")'],
343
+ },
344
+ { name: 'featureFlag', flagKeyIndex: 0, examples: ['featureFlag("feature-name")'] },
345
+ { name: 'hasFeature', flagKeyIndex: 0, examples: ['hasFeature("feature-name")'] },
346
+ ],
347
+ },
348
+ ];
349
+ }
350
+ //# sourceMappingURL=typescript.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typescript.js","sourceRoot":"","sources":["../../../src/detection/detectors/typescript.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Represents a detected feature flag in source code.
3
+ */
4
+ export interface FeatureFlag {
5
+ /** Flag name/key */
6
+ name: string;
7
+ /** File where the flag is found (from diff) */
8
+ filePath: string;
9
+ /** Line number in the file (1-based) */
10
+ lineNumber: number;
11
+ /** Programming language (e.g., "go", "typescript") */
12
+ language: string;
13
+ /** SDK/library provider if detected (e.g., "launchdarkly") */
14
+ provider?: string;
15
+ }
16
+ //# sourceMappingURL=feature-flag.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feature-flag.d.ts","sourceRoot":"","sources":["../../src/detection/feature-flag.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,oBAAoB;IACpB,IAAI,EAAE,MAAM,CAAA;IACZ,+CAA+C;IAC/C,QAAQ,EAAE,MAAM,CAAA;IAChB,wCAAwC;IACxC,UAAU,EAAE,MAAM,CAAA;IAClB,sDAAsD;IACtD,QAAQ,EAAE,MAAM,CAAA;IAChB,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=feature-flag.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feature-flag.js","sourceRoot":"","sources":["../../src/detection/feature-flag.ts"],"names":[],"mappings":""}