@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,18 @@
1
+ /**
2
+ * JavaScript language feature flag detector.
3
+ * In the Go codebase, TypeScript and JavaScript share the same detector.
4
+ * This provides a JavaScript-specific detector that re-uses the TypeScript providers
5
+ * but reports the language as "javascript".
6
+ */
7
+ import type { FeatureFlag } from '../feature-flag.js';
8
+ import type { FeatureFlagProvider, Language, LanguageDetector } from '../interface.js';
9
+ export declare class JavaScriptDetector implements LanguageDetector {
10
+ private readonly providers;
11
+ constructor(providers?: FeatureFlagProvider[]);
12
+ language(): Language;
13
+ fileExtensions(): string[];
14
+ supportsFile(filename: string): boolean;
15
+ detectFlags(filename: string, content: string): FeatureFlag[];
16
+ getProviders(): FeatureFlagProvider[];
17
+ }
18
+ //# sourceMappingURL=javascript.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"javascript.d.ts","sourceRoot":"","sources":["../../../src/detection/detectors/javascript.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,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"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * JavaScript language feature flag detector.
3
+ * In the Go codebase, TypeScript and JavaScript share the same detector.
4
+ * This provides a JavaScript-specific detector that re-uses the TypeScript providers
5
+ * but reports the language as "javascript".
6
+ */
7
+ import { detectFlagsWithRegex } from '../helpers.js';
8
+ import { Languages } from '../interface.js';
9
+ import { defaultTypeScriptProviders } from './typescript.js';
10
+ export class JavaScriptDetector {
11
+ providers;
12
+ constructor(providers) {
13
+ this.providers = providers ?? defaultTypeScriptProviders();
14
+ }
15
+ language() {
16
+ return Languages.JavaScript;
17
+ }
18
+ fileExtensions() {
19
+ return ['.js', '.jsx', '.mjs', '.cjs'];
20
+ }
21
+ supportsFile(filename) {
22
+ const ext = filename.toLowerCase().split('.').pop();
23
+ return ['js', 'jsx', 'mjs', 'cjs'].includes(ext ?? '');
24
+ }
25
+ detectFlags(filename, content) {
26
+ return detectFlagsWithRegex(filename, content, this.language(), this.providers);
27
+ }
28
+ getProviders() {
29
+ return this.providers;
30
+ }
31
+ }
32
+ //# sourceMappingURL=javascript.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"javascript.js","sourceRoot":"","sources":["../../../src/detection/detectors/javascript.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAA;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAE3C,OAAO,EAAE,0BAA0B,EAAE,MAAM,iBAAiB,CAAA;AAK5D,MAAM,OAAO,kBAAkB;IACZ,SAAS,CAAuB;IAEjD,YAAY,SAAiC;QAC3C,IAAI,CAAC,SAAS,GAAG,SAAS,IAAI,0BAA0B,EAAE,CAAA;IAC5D,CAAC;IAED,QAAQ;QACN,OAAO,SAAS,CAAC,UAAU,CAAA;IAC7B,CAAC;IAED,cAAc;QACZ,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;IACxC,CAAC;IAED,YAAY,CAAC,QAAgB;QAC3B,MAAM,GAAG,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAA;QACnD,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,GAAG,IAAI,EAAE,CAAC,CAAA;IACxD,CAAC;IAED,WAAW,CAAC,QAAgB,EAAE,OAAe;QAC3C,OAAO,oBAAoB,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,CAAA;IACjF,CAAC;IAED,YAAY;QACV,OAAO,IAAI,CAAC,SAAS,CAAA;IACvB,CAAC;CACF"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Kotlin language feature flag detector.
3
+ * Ported from Go: internal/languages/kotlin/detector.go
4
+ */
5
+ import type { FeatureFlag } from '../feature-flag.js';
6
+ import type { FeatureFlagProvider, Language, LanguageDetector } from '../interface.js';
7
+ export declare class KotlinDetector 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 defaultKotlinProviders(): FeatureFlagProvider[];
17
+ //# sourceMappingURL=kotlin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kotlin.d.ts","sourceRoot":"","sources":["../../../src/detection/detectors/kotlin.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,cAAe,YAAW,gBAAgB;IACrD,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,sBAAsB,IAAI,mBAAmB,EAAE,CAoL9D"}
@@ -0,0 +1,210 @@
1
+ /**
2
+ * Kotlin language feature flag detector.
3
+ * Ported from Go: internal/languages/kotlin/detector.go
4
+ */
5
+ import { detectFlagsWithRegex } from '../helpers.js';
6
+ import { Languages } from '../interface.js';
7
+ export class KotlinDetector {
8
+ providers;
9
+ constructor(providers) {
10
+ this.providers = providers ?? defaultKotlinProviders();
11
+ }
12
+ language() {
13
+ return Languages.Kotlin;
14
+ }
15
+ fileExtensions() {
16
+ return ['.kt', '.kts'];
17
+ }
18
+ supportsFile(filename) {
19
+ const lower = filename.toLowerCase();
20
+ return lower.endsWith('.kt') || lower.endsWith('.kts');
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 defaultKotlinProviders() {
30
+ return [
31
+ {
32
+ name: 'LaunchDarkly Kotlin SDK',
33
+ importPattern: 'com.launchdarkly.sdk',
34
+ description: 'LaunchDarkly Kotlin/Android SDK',
35
+ enabled: true,
36
+ methods: [
37
+ {
38
+ name: 'boolVariation',
39
+ flagKeyIndex: 0,
40
+ examples: ['client.boolVariation("flag-key", context, false)'],
41
+ },
42
+ {
43
+ name: 'stringVariation',
44
+ flagKeyIndex: 0,
45
+ examples: ['client.stringVariation("flag-key", context, "default")'],
46
+ },
47
+ {
48
+ name: 'intVariation',
49
+ flagKeyIndex: 0,
50
+ examples: ['client.intVariation("flag-key", context, 0)'],
51
+ },
52
+ ],
53
+ },
54
+ {
55
+ name: 'Unleash Kotlin SDK',
56
+ importPattern: 'io.getunleash',
57
+ description: 'Unleash Kotlin/Android SDK',
58
+ enabled: true,
59
+ methods: [
60
+ { name: 'isEnabled', flagKeyIndex: 0, examples: ['unleash.isEnabled("feature-toggle")'] },
61
+ { name: 'getVariant', flagKeyIndex: 0, examples: ['unleash.getVariant("feature-toggle")'] },
62
+ ],
63
+ },
64
+ {
65
+ name: 'Split.io Kotlin SDK',
66
+ importPattern: 'io.split.android',
67
+ description: 'Split.io Android/Kotlin SDK',
68
+ enabled: true,
69
+ methods: [
70
+ { name: 'getTreatment', flagKeyIndex: 0, examples: ['client.getTreatment("split-name")'] },
71
+ ],
72
+ },
73
+ {
74
+ name: 'Flipt Kotlin SDK',
75
+ importPattern: 'io.flipt',
76
+ description: 'Flipt Kotlin SDK',
77
+ enabled: true,
78
+ methods: [
79
+ {
80
+ name: 'evaluateBoolean',
81
+ flagKeyIndex: 0,
82
+ examples: ['flipt.evaluateBoolean("flag-key", entityId, context)'],
83
+ },
84
+ {
85
+ name: 'evaluateVariant',
86
+ flagKeyIndex: 0,
87
+ examples: ['flipt.evaluateVariant("flag-key", entityId, context)'],
88
+ },
89
+ ],
90
+ },
91
+ {
92
+ name: 'Optimizely Kotlin SDK',
93
+ importPattern: 'com.optimizely.ab',
94
+ description: 'Optimizely Feature Experimentation Kotlin SDK',
95
+ enabled: true,
96
+ methods: [
97
+ { name: 'decide', flagKeyIndex: 0, examples: ['user.decide("flag-key", options)'] },
98
+ {
99
+ name: 'isFeatureEnabled',
100
+ flagKeyIndex: 0,
101
+ examples: ['optimizely.isFeatureEnabled("feature-key", userId)'],
102
+ },
103
+ ],
104
+ },
105
+ {
106
+ name: 'ConfigCat Kotlin SDK',
107
+ importPattern: 'com.configcat',
108
+ description: 'ConfigCat Kotlin/Android SDK',
109
+ enabled: true,
110
+ methods: [
111
+ { name: 'getValue', flagKeyIndex: 0, examples: ['client.getValue("flag-key", false)'] },
112
+ ],
113
+ },
114
+ {
115
+ name: 'Statsig Kotlin SDK',
116
+ importPattern: 'com.statsig',
117
+ description: 'Statsig Kotlin/Android SDK',
118
+ enabled: true,
119
+ methods: [
120
+ { name: 'checkGate', flagKeyIndex: 0, examples: ['statsig.checkGate("gate-name")'] },
121
+ {
122
+ name: 'getExperiment',
123
+ flagKeyIndex: 0,
124
+ examples: ['statsig.getExperiment("experiment-name")'],
125
+ },
126
+ { name: 'getConfig', flagKeyIndex: 0, examples: ['statsig.getConfig("config-name")'] },
127
+ ],
128
+ },
129
+ {
130
+ name: 'GrowthBook Kotlin SDK',
131
+ importPattern: 'growthbook.sdk',
132
+ description: 'GrowthBook Kotlin/Android SDK',
133
+ enabled: true,
134
+ methods: [
135
+ { name: 'feature', flagKeyIndex: 0, examples: ['gb.feature("feature-key").on'] },
136
+ { name: 'isOn', flagKeyIndex: 0, examples: ['gb.isOn("feature-key")'] },
137
+ ],
138
+ },
139
+ {
140
+ name: 'DevCycle Kotlin SDK',
141
+ importPattern: 'com.devcycle',
142
+ description: 'DevCycle Kotlin/Android SDK',
143
+ enabled: true,
144
+ methods: [
145
+ {
146
+ name: 'variableValue',
147
+ flagKeyIndex: 0,
148
+ examples: ['client.variableValue("variable-key", defaultValue)'],
149
+ },
150
+ { name: 'variable', flagKeyIndex: 0, examples: ['client.variable("variable-key")'] },
151
+ ],
152
+ },
153
+ {
154
+ name: 'Eppo Kotlin SDK',
155
+ importPattern: 'com.eppo',
156
+ description: 'Eppo Kotlin/Android SDK',
157
+ enabled: true,
158
+ methods: [
159
+ {
160
+ name: 'getBooleanAssignment',
161
+ flagKeyIndex: 0,
162
+ examples: ['eppoClient.getBooleanAssignment("flag-key", subjectKey, defaultValue)'],
163
+ },
164
+ {
165
+ name: 'getStringAssignment',
166
+ flagKeyIndex: 0,
167
+ examples: ['eppoClient.getStringAssignment("flag-key", subjectKey, defaultValue)'],
168
+ },
169
+ ],
170
+ },
171
+ {
172
+ name: 'PostHog Android SDK',
173
+ importPattern: 'com.posthog.android',
174
+ description: 'PostHog Android/Kotlin SDK',
175
+ enabled: true,
176
+ methods: [
177
+ {
178
+ name: 'isFeatureEnabled',
179
+ flagKeyIndex: 0,
180
+ examples: ['PostHog.isFeatureEnabled("flag-key")'],
181
+ },
182
+ {
183
+ name: 'getFeatureFlag',
184
+ flagKeyIndex: 0,
185
+ examples: ['PostHog.getFeatureFlag("flag-key")'],
186
+ },
187
+ {
188
+ name: 'getFeatureFlagPayload',
189
+ flagKeyIndex: 0,
190
+ examples: ['PostHog.getFeatureFlagPayload("flag-key")'],
191
+ },
192
+ ],
193
+ },
194
+ {
195
+ name: 'Custom Feature Flags',
196
+ description: 'Common custom Kotlin feature flag patterns',
197
+ enabled: true,
198
+ methods: [
199
+ {
200
+ name: 'isFeatureEnabled',
201
+ flagKeyIndex: 0,
202
+ examples: ['isFeatureEnabled("feature-name")'],
203
+ },
204
+ { name: 'checkFeature', flagKeyIndex: 0, examples: ['checkFeature("feature-name")'] },
205
+ { name: 'hasFeature', flagKeyIndex: 0, examples: ['hasFeature("feature-name")'] },
206
+ ],
207
+ },
208
+ ];
209
+ }
210
+ //# sourceMappingURL=kotlin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kotlin.js","sourceRoot":"","sources":["../../../src/detection/detectors/kotlin.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAA;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAK3C,MAAM,OAAO,cAAc;IACR,SAAS,CAAuB;IAEjD,YAAY,SAAiC;QAC3C,IAAI,CAAC,SAAS,GAAG,SAAS,IAAI,sBAAsB,EAAE,CAAA;IACxD,CAAC;IAED,QAAQ;QACN,OAAO,SAAS,CAAC,MAAM,CAAA;IACzB,CAAC;IAED,cAAc;QACZ,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;IACxB,CAAC;IAED,YAAY,CAAC,QAAgB;QAC3B,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAA;QACpC,OAAO,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;IACxD,CAAC;IAED,WAAW,CAAC,QAAgB,EAAE,OAAe;QAC3C,OAAO,oBAAoB,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,CAAA;IACjF,CAAC;IAED,YAAY;QACV,OAAO,IAAI,CAAC,SAAS,CAAA;IACvB,CAAC;CACF;AAED,MAAM,UAAU,sBAAsB;IACpC,OAAO;QACL;YACE,IAAI,EAAE,yBAAyB;YAC/B,aAAa,EAAE,sBAAsB;YACrC,WAAW,EAAE,iCAAiC;YAC9C,OAAO,EAAE,IAAI;YACb,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,eAAe;oBACrB,YAAY,EAAE,CAAC;oBACf,QAAQ,EAAE,CAAC,kDAAkD,CAAC;iBAC/D;gBACD;oBACE,IAAI,EAAE,iBAAiB;oBACvB,YAAY,EAAE,CAAC;oBACf,QAAQ,EAAE,CAAC,wDAAwD,CAAC;iBACrE;gBACD;oBACE,IAAI,EAAE,cAAc;oBACpB,YAAY,EAAE,CAAC;oBACf,QAAQ,EAAE,CAAC,6CAA6C,CAAC;iBAC1D;aACF;SACF;QACD;YACE,IAAI,EAAE,oBAAoB;YAC1B,aAAa,EAAE,eAAe;YAC9B,WAAW,EAAE,4BAA4B;YACzC,OAAO,EAAE,IAAI;YACb,OAAO,EAAE;gBACP,EAAE,IAAI,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,qCAAqC,CAAC,EAAE;gBACzF,EAAE,IAAI,EAAE,YAAY,EAAE,YAAY,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,sCAAsC,CAAC,EAAE;aAC5F;SACF;QACD;YACE,IAAI,EAAE,qBAAqB;YAC3B,aAAa,EAAE,kBAAkB;YACjC,WAAW,EAAE,6BAA6B;YAC1C,OAAO,EAAE,IAAI;YACb,OAAO,EAAE;gBACP,EAAE,IAAI,EAAE,cAAc,EAAE,YAAY,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,mCAAmC,CAAC,EAAE;aAC3F;SACF;QACD;YACE,IAAI,EAAE,kBAAkB;YACxB,aAAa,EAAE,UAAU;YACzB,WAAW,EAAE,kBAAkB;YAC/B,OAAO,EAAE,IAAI;YACb,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,iBAAiB;oBACvB,YAAY,EAAE,CAAC;oBACf,QAAQ,EAAE,CAAC,sDAAsD,CAAC;iBACnE;gBACD;oBACE,IAAI,EAAE,iBAAiB;oBACvB,YAAY,EAAE,CAAC;oBACf,QAAQ,EAAE,CAAC,sDAAsD,CAAC;iBACnE;aACF;SACF;QACD;YACE,IAAI,EAAE,uBAAuB;YAC7B,aAAa,EAAE,mBAAmB;YAClC,WAAW,EAAE,+CAA+C;YAC5D,OAAO,EAAE,IAAI;YACb,OAAO,EAAE;gBACP,EAAE,IAAI,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,kCAAkC,CAAC,EAAE;gBACnF;oBACE,IAAI,EAAE,kBAAkB;oBACxB,YAAY,EAAE,CAAC;oBACf,QAAQ,EAAE,CAAC,oDAAoD,CAAC;iBACjE;aACF;SACF;QACD;YACE,IAAI,EAAE,sBAAsB;YAC5B,aAAa,EAAE,eAAe;YAC9B,WAAW,EAAE,8BAA8B;YAC3C,OAAO,EAAE,IAAI;YACb,OAAO,EAAE;gBACP,EAAE,IAAI,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,oCAAoC,CAAC,EAAE;aACxF;SACF;QACD;YACE,IAAI,EAAE,oBAAoB;YAC1B,aAAa,EAAE,aAAa;YAC5B,WAAW,EAAE,4BAA4B;YACzC,OAAO,EAAE,IAAI;YACb,OAAO,EAAE;gBACP,EAAE,IAAI,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,gCAAgC,CAAC,EAAE;gBACpF;oBACE,IAAI,EAAE,eAAe;oBACrB,YAAY,EAAE,CAAC;oBACf,QAAQ,EAAE,CAAC,0CAA0C,CAAC;iBACvD;gBACD,EAAE,IAAI,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,kCAAkC,CAAC,EAAE;aACvF;SACF;QACD;YACE,IAAI,EAAE,uBAAuB;YAC7B,aAAa,EAAE,gBAAgB;YAC/B,WAAW,EAAE,+BAA+B;YAC5C,OAAO,EAAE,IAAI;YACb,OAAO,EAAE;gBACP,EAAE,IAAI,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,8BAA8B,CAAC,EAAE;gBAChF,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,wBAAwB,CAAC,EAAE;aACxE;SACF;QACD;YACE,IAAI,EAAE,qBAAqB;YAC3B,aAAa,EAAE,cAAc;YAC7B,WAAW,EAAE,6BAA6B;YAC1C,OAAO,EAAE,IAAI;YACb,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,eAAe;oBACrB,YAAY,EAAE,CAAC;oBACf,QAAQ,EAAE,CAAC,oDAAoD,CAAC;iBACjE;gBACD,EAAE,IAAI,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,iCAAiC,CAAC,EAAE;aACrF;SACF;QACD;YACE,IAAI,EAAE,iBAAiB;YACvB,aAAa,EAAE,UAAU;YACzB,WAAW,EAAE,yBAAyB;YACtC,OAAO,EAAE,IAAI;YACb,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,sBAAsB;oBAC5B,YAAY,EAAE,CAAC;oBACf,QAAQ,EAAE,CAAC,uEAAuE,CAAC;iBACpF;gBACD;oBACE,IAAI,EAAE,qBAAqB;oBAC3B,YAAY,EAAE,CAAC;oBACf,QAAQ,EAAE,CAAC,sEAAsE,CAAC;iBACnF;aACF;SACF;QACD;YACE,IAAI,EAAE,qBAAqB;YAC3B,aAAa,EAAE,qBAAqB;YACpC,WAAW,EAAE,4BAA4B;YACzC,OAAO,EAAE,IAAI;YACb,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,kBAAkB;oBACxB,YAAY,EAAE,CAAC;oBACf,QAAQ,EAAE,CAAC,sCAAsC,CAAC;iBACnD;gBACD;oBACE,IAAI,EAAE,gBAAgB;oBACtB,YAAY,EAAE,CAAC;oBACf,QAAQ,EAAE,CAAC,oCAAoC,CAAC;iBACjD;gBACD;oBACE,IAAI,EAAE,uBAAuB;oBAC7B,YAAY,EAAE,CAAC;oBACf,QAAQ,EAAE,CAAC,2CAA2C,CAAC;iBACxD;aACF;SACF;QACD;YACE,IAAI,EAAE,sBAAsB;YAC5B,WAAW,EAAE,4CAA4C;YACzD,OAAO,EAAE,IAAI;YACb,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,kBAAkB;oBACxB,YAAY,EAAE,CAAC;oBACf,QAAQ,EAAE,CAAC,kCAAkC,CAAC;iBAC/C;gBACD,EAAE,IAAI,EAAE,cAAc,EAAE,YAAY,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,8BAA8B,CAAC,EAAE;gBACrF,EAAE,IAAI,EAAE,YAAY,EAAE,YAAY,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,4BAA4B,CAAC,EAAE;aAClF;SACF;KACF,CAAA;AACH,CAAC"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Objective-C language feature flag detector.
3
+ * Ported from Go: internal/languages/objc/detector.go
4
+ */
5
+ import type { FeatureFlag } from '../feature-flag.js';
6
+ import type { FeatureFlagProvider, Language, LanguageDetector } from '../interface.js';
7
+ export declare class ObjectiveCDetector 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 defaultObjCProviders(): FeatureFlagProvider[];
17
+ //# sourceMappingURL=objectivec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"objectivec.d.ts","sourceRoot":"","sources":["../../../src/detection/detectors/objectivec.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;IAQ7D,YAAY,IAAI,mBAAmB,EAAE;CAGtC;AAED,wBAAgB,oBAAoB,IAAI,mBAAmB,EAAE,CAkN5D"}
@@ -0,0 +1,244 @@
1
+ /**
2
+ * Objective-C language feature flag detector.
3
+ * Ported from Go: internal/languages/objc/detector.go
4
+ */
5
+ import { detectFlagsWithRegex, isValidFlagKey, deduplicateFlags } from '../helpers.js';
6
+ import { Languages } from '../interface.js';
7
+ export class ObjectiveCDetector {
8
+ providers;
9
+ constructor(providers) {
10
+ this.providers = providers ?? defaultObjCProviders();
11
+ }
12
+ language() {
13
+ return Languages.ObjectiveC;
14
+ }
15
+ fileExtensions() {
16
+ return ['.m', '.mm', '.h'];
17
+ }
18
+ supportsFile(filename) {
19
+ const lower = filename.toLowerCase();
20
+ return lower.endsWith('.m') || lower.endsWith('.mm') || lower.endsWith('.h');
21
+ }
22
+ detectFlags(filename, content) {
23
+ // Run standard regex detection
24
+ const flags = detectFlagsWithRegex(filename, content, this.language(), this.providers);
25
+ // Filter out invalid flag keys (URLs, paths, etc.) -- extra validation for Obj-C
26
+ const validFlags = flags.filter((f) => isValidFlagKey(f.name));
27
+ return deduplicateFlags(validFlags);
28
+ }
29
+ getProviders() {
30
+ return this.providers;
31
+ }
32
+ }
33
+ export function defaultObjCProviders() {
34
+ return [
35
+ {
36
+ name: 'LaunchDarkly iOS SDK (Objective-C)',
37
+ importPattern: 'LaunchDarkly/LDClient.h',
38
+ description: 'LaunchDarkly iOS SDK for Objective-C',
39
+ enabled: true,
40
+ methods: [
41
+ {
42
+ name: 'boolVariation',
43
+ flagKeyIndex: 0,
44
+ examples: ['[[LDClient get] boolVariation:@"flag-key" defaultValue:NO]'],
45
+ },
46
+ {
47
+ name: 'boolVariationForKey',
48
+ flagKeyIndex: 0,
49
+ examples: ['[[LDClient get] boolVariationForKey:@"flag-key" defaultValue:NO]'],
50
+ },
51
+ {
52
+ name: 'stringVariation',
53
+ flagKeyIndex: 0,
54
+ examples: ['[[LDClient get] stringVariation:@"flag-key" defaultValue:@""]'],
55
+ },
56
+ {
57
+ name: 'stringVariationForKey',
58
+ flagKeyIndex: 0,
59
+ examples: ['[[LDClient get] stringVariationForKey:@"flag-key" defaultValue:@""]'],
60
+ },
61
+ {
62
+ name: 'numberVariation',
63
+ flagKeyIndex: 0,
64
+ examples: ['[[LDClient get] numberVariation:@"flag-key" defaultValue:@0]'],
65
+ },
66
+ {
67
+ name: 'numberVariationForKey',
68
+ flagKeyIndex: 0,
69
+ examples: ['[[LDClient get] numberVariationForKey:@"flag-key" defaultValue:@0]'],
70
+ },
71
+ {
72
+ name: 'jsonVariation',
73
+ flagKeyIndex: 0,
74
+ examples: ['[[LDClient get] jsonVariation:@"flag-key" defaultValue:nil]'],
75
+ },
76
+ {
77
+ name: 'jsonVariationForKey',
78
+ flagKeyIndex: 0,
79
+ examples: ['[[LDClient get] jsonVariationForKey:@"flag-key" defaultValue:nil]'],
80
+ },
81
+ {
82
+ name: 'variationDetail',
83
+ flagKeyIndex: 0,
84
+ examples: ['[[LDClient get] variationDetail:@"flag-key" defaultValue:NO]'],
85
+ },
86
+ {
87
+ name: 'variationDetailForKey',
88
+ flagKeyIndex: 0,
89
+ examples: ['[[LDClient get] variationDetailForKey:@"flag-key" defaultValue:NO]'],
90
+ },
91
+ ],
92
+ },
93
+ {
94
+ name: 'Unleash iOS SDK (Objective-C)',
95
+ importPattern: 'UnleashProxyClientSwift',
96
+ description: 'Unleash iOS SDK for Objective-C',
97
+ enabled: true,
98
+ methods: [
99
+ { name: 'isEnabled', flagKeyIndex: 0, examples: ['[unleash isEnabled:@"feature-toggle"]'] },
100
+ {
101
+ name: 'getVariant',
102
+ flagKeyIndex: 0,
103
+ examples: ['[unleash getVariant:@"feature-toggle"]'],
104
+ },
105
+ ],
106
+ },
107
+ {
108
+ name: 'Split.io iOS SDK (Objective-C)',
109
+ importPattern: 'Split/Split.h',
110
+ description: 'Split.io iOS SDK for Objective-C',
111
+ enabled: true,
112
+ methods: [
113
+ {
114
+ name: 'getTreatment',
115
+ flagKeyIndex: 0,
116
+ examples: ['[splitClient getTreatment:@"split-name"]'],
117
+ },
118
+ {
119
+ name: 'getTreatmentWithConfig',
120
+ flagKeyIndex: 0,
121
+ examples: ['[splitClient getTreatmentWithConfig:@"split-name"]'],
122
+ },
123
+ {
124
+ name: 'getTreatments',
125
+ flagKeyIndex: 0,
126
+ examples: ['[splitClient getTreatments:@[@"split-1", @"split-2"]]'],
127
+ },
128
+ ],
129
+ },
130
+ {
131
+ name: 'Optimizely iOS SDK (Objective-C)',
132
+ importPattern: 'Optimizely/Optimizely.h',
133
+ description: 'Optimizely Feature Experimentation iOS SDK for Objective-C',
134
+ enabled: true,
135
+ methods: [
136
+ {
137
+ name: 'isFeatureEnabled',
138
+ flagKeyIndex: 0,
139
+ examples: ['[optimizely isFeatureEnabled:@"feature-key" userId:userId attributes:nil]'],
140
+ },
141
+ {
142
+ name: 'getFeatureVariable',
143
+ flagKeyIndex: 0,
144
+ examples: [
145
+ '[optimizely getFeatureVariable:@"feature-key" variableKey:@"var" userId:userId]',
146
+ ],
147
+ },
148
+ { name: 'decide', flagKeyIndex: 0, examples: ['[user decide:@"flag-key" options:nil]'] },
149
+ ],
150
+ },
151
+ {
152
+ name: 'Flagsmith iOS SDK (Objective-C)',
153
+ importPattern: 'FlagsmithClient',
154
+ description: 'Flagsmith iOS SDK for Objective-C',
155
+ enabled: true,
156
+ methods: [
157
+ {
158
+ name: 'hasFeatureFlag',
159
+ flagKeyIndex: 0,
160
+ examples: ['[[Flagsmith shared] hasFeatureFlag:@"feature-name"]'],
161
+ },
162
+ {
163
+ name: 'hasFeatureFlagWithID',
164
+ flagKeyIndex: 0,
165
+ examples: ['[[Flagsmith shared] hasFeatureFlagWithID:@"feature-name"]'],
166
+ },
167
+ {
168
+ name: 'getValueForFeature',
169
+ flagKeyIndex: 0,
170
+ examples: ['[[Flagsmith shared] getValueForFeature:@"feature-name"]'],
171
+ },
172
+ ],
173
+ },
174
+ {
175
+ name: 'ConfigCat iOS SDK (Objective-C)',
176
+ importPattern: 'ConfigCat/ConfigCat.h',
177
+ description: 'ConfigCat iOS SDK for Objective-C',
178
+ enabled: true,
179
+ methods: [
180
+ {
181
+ name: 'getValue',
182
+ flagKeyIndex: 0,
183
+ examples: ['[configCatClient getValue:@"flag-key" defaultValue:@NO]'],
184
+ },
185
+ {
186
+ name: 'getValueForKey',
187
+ flagKeyIndex: 0,
188
+ examples: ['[configCatClient getValueForKey:@"flag-key" defaultValue:@NO]'],
189
+ },
190
+ ],
191
+ },
192
+ {
193
+ name: 'PostHog iOS SDK (Objective-C)',
194
+ importPattern: 'PostHog/PostHog.h',
195
+ description: 'PostHog iOS SDK for Objective-C',
196
+ enabled: true,
197
+ methods: [
198
+ {
199
+ name: 'isFeatureEnabled',
200
+ flagKeyIndex: 0,
201
+ examples: ['[[PHGPostHog sharedInstance] isFeatureEnabled:@"flag-key"]'],
202
+ },
203
+ {
204
+ name: 'getFeatureFlag',
205
+ flagKeyIndex: 0,
206
+ examples: ['[[PHGPostHog sharedInstance] getFeatureFlag:@"flag-key"]'],
207
+ },
208
+ {
209
+ name: 'getFeatureFlagPayload',
210
+ flagKeyIndex: 0,
211
+ examples: ['[[PHGPostHog sharedInstance] getFeatureFlagPayload:@"flag-key"]'],
212
+ },
213
+ ],
214
+ },
215
+ {
216
+ name: 'Custom Feature Flags (Objective-C)',
217
+ description: 'Common custom Objective-C feature flag patterns',
218
+ enabled: true,
219
+ methods: [
220
+ {
221
+ name: 'isFeatureEnabled',
222
+ flagKeyIndex: 0,
223
+ examples: ['[featureFlags isFeatureEnabled:@"feature-name"]'],
224
+ },
225
+ {
226
+ name: 'checkFeature',
227
+ flagKeyIndex: 0,
228
+ examples: ['[featureFlags checkFeature:@"feature-name"]'],
229
+ },
230
+ {
231
+ name: 'hasFeature',
232
+ flagKeyIndex: 0,
233
+ examples: ['[featureFlags hasFeature:@"feature-name"]'],
234
+ },
235
+ {
236
+ name: 'featureEnabled',
237
+ flagKeyIndex: 0,
238
+ examples: ['[flags featureEnabled:@"feature-name"]'],
239
+ },
240
+ ],
241
+ },
242
+ ];
243
+ }
244
+ //# sourceMappingURL=objectivec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"objectivec.js","sourceRoot":"","sources":["../../../src/detection/detectors/objectivec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * PHP language feature flag detector.
3
+ * Ported from Go: internal/languages/php/detector.go
4
+ */
5
+ import type { FeatureFlag } from '../feature-flag.js';
6
+ import type { FeatureFlagProvider, Language, LanguageDetector } from '../interface.js';
7
+ export declare class PHPDetector 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 defaultPHPProviders(): FeatureFlagProvider[];
17
+ //# sourceMappingURL=php.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"php.d.ts","sourceRoot":"","sources":["../../../src/detection/detectors/php.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,WAAY,YAAW,gBAAgB;IAClD,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,mBAAmB,IAAI,mBAAmB,EAAE,CAoL3D"}