@smooai/config 3.0.0 → 3.1.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 (81) hide show
  1. package/dist/browser/chunk-YMNAMX6Y.mjs +55 -0
  2. package/dist/browser/chunk-YMNAMX6Y.mjs.map +1 -0
  3. package/dist/browser/client/index.mjs +14 -0
  4. package/dist/browser/client/index.mjs.map +1 -0
  5. package/dist/browser/feature-flags/index.mjs +4 -24
  6. package/dist/browser/feature-flags/index.mjs.map +1 -1
  7. package/dist/{chunk-2DYBQ6SF.mjs → chunk-43SVVFYE.mjs} +3 -3
  8. package/dist/{chunk-PCXGCPWC.mjs → chunk-6XDO5B2T.mjs} +8 -8
  9. package/dist/{chunk-7CCXEKIK.mjs → chunk-H4YT7JJJ.mjs} +4 -4
  10. package/dist/{chunk-JAEJOSH5.mjs → chunk-NF7JF2UP.mjs} +2 -2
  11. package/dist/{chunk-7GMXNAVA.mjs → chunk-PD2SHA7M.mjs} +11 -11
  12. package/dist/{chunk-2CD4ZQFH.mjs → chunk-R7NMFJFJ.mjs} +2 -2
  13. package/dist/chunk-SAX775JO.mjs +40 -0
  14. package/dist/chunk-SAX775JO.mjs.map +1 -0
  15. package/dist/chunk-UCFP2MA2.mjs +55 -0
  16. package/dist/chunk-UCFP2MA2.mjs.map +1 -0
  17. package/dist/{chunk-4RYDS2HX.mjs → chunk-UEIVAJKL.mjs} +2 -2
  18. package/dist/client/index.d.mts +66 -0
  19. package/dist/client/index.d.ts +66 -0
  20. package/dist/client/index.js +82 -0
  21. package/dist/client/index.js.map +1 -0
  22. package/dist/client/index.mjs +14 -0
  23. package/dist/client/index.mjs.map +1 -0
  24. package/dist/config/config.mjs +2 -2
  25. package/dist/config/findAndProcessEnvConfig.mjs +5 -5
  26. package/dist/config/findAndProcessFileConfig.mjs +6 -6
  27. package/dist/config/index.mjs +6 -6
  28. package/dist/config/parseConfigSchema.mjs +3 -3
  29. package/dist/config/server.mjs +9 -9
  30. package/dist/feature-flags/index.d.mts +1 -59
  31. package/dist/feature-flags/index.d.ts +1 -59
  32. package/dist/feature-flags/index.js +9 -3
  33. package/dist/feature-flags/index.js.map +1 -1
  34. package/dist/feature-flags/index.mjs +4 -24
  35. package/dist/feature-flags/index.mjs.map +1 -1
  36. package/dist/integration-tests/1/smooai-config/config.mjs +3 -3
  37. package/dist/integration-tests/1/smooai-config/default.mjs +3 -3
  38. package/dist/integration-tests/1/smooai-config/development.mjs +3 -3
  39. package/dist/integration-tests/1/smooai-config/production.aws.mjs +3 -3
  40. package/dist/integration-tests/1/smooai-config/production.aws.us-east-1.mjs +3 -3
  41. package/dist/integration-tests/1/smooai-config/production.aws.us-east-2.mjs +3 -3
  42. package/dist/integration-tests/1/smooai-config/production.mjs +3 -3
  43. package/dist/integration-tests/1/smooai-config/staging.mjs +3 -3
  44. package/dist/integration-tests/2/smooai-config/config.mjs +3 -3
  45. package/dist/integration-tests/2/smooai-config/default.mjs +3 -3
  46. package/dist/integration-tests/2/smooai-config/development.mjs +3 -3
  47. package/dist/integration-tests/2/smooai-config/production.aws.mjs +3 -3
  48. package/dist/integration-tests/2/smooai-config/production.aws.us-east-1.mjs +3 -3
  49. package/dist/integration-tests/2/smooai-config/production.mjs +3 -3
  50. package/dist/nextjs/index.mjs +3 -3
  51. package/dist/nextjs/withFeatureFlags.d.mts +41 -0
  52. package/dist/nextjs/withFeatureFlags.d.ts +41 -0
  53. package/dist/nextjs/withFeatureFlags.js +79 -0
  54. package/dist/nextjs/withFeatureFlags.js.map +1 -0
  55. package/dist/nextjs/withFeatureFlags.mjs +20 -0
  56. package/dist/nextjs/withFeatureFlags.mjs.map +1 -0
  57. package/dist/nextjs/withSmooConfig.d.mts +63 -0
  58. package/dist/nextjs/withSmooConfig.d.ts +63 -0
  59. package/dist/nextjs/withSmooConfig.js +64 -0
  60. package/dist/nextjs/withSmooConfig.js.map +1 -0
  61. package/dist/nextjs/withSmooConfig.mjs +8 -0
  62. package/dist/nextjs/withSmooConfig.mjs.map +1 -0
  63. package/dist/platform/server/server.async.mjs +8 -8
  64. package/dist/platform/server/server.featureFlag.sync.mjs +8 -8
  65. package/dist/platform/server/server.publicConfig.sync.mjs +8 -8
  66. package/dist/platform/server/server.secretConfig.sync.mjs +8 -8
  67. package/dist/platform/server.mjs +8 -8
  68. package/dist/vite/smooConfigPlugin.d.mts +47 -0
  69. package/dist/vite/smooConfigPlugin.d.ts +47 -0
  70. package/dist/vite/smooConfigPlugin.js +60 -0
  71. package/dist/vite/smooConfigPlugin.js.map +1 -0
  72. package/dist/vite/smooConfigPlugin.mjs +37 -0
  73. package/dist/vite/smooConfigPlugin.mjs.map +1 -0
  74. package/package.json +25 -1
  75. /package/dist/{chunk-2DYBQ6SF.mjs.map → chunk-43SVVFYE.mjs.map} +0 -0
  76. /package/dist/{chunk-PCXGCPWC.mjs.map → chunk-6XDO5B2T.mjs.map} +0 -0
  77. /package/dist/{chunk-7CCXEKIK.mjs.map → chunk-H4YT7JJJ.mjs.map} +0 -0
  78. /package/dist/{chunk-JAEJOSH5.mjs.map → chunk-NF7JF2UP.mjs.map} +0 -0
  79. /package/dist/{chunk-7GMXNAVA.mjs.map → chunk-PD2SHA7M.mjs.map} +0 -0
  80. /package/dist/{chunk-2CD4ZQFH.mjs.map → chunk-R7NMFJFJ.mjs.map} +0 -0
  81. /package/dist/{chunk-4RYDS2HX.mjs.map → chunk-UEIVAJKL.mjs.map} +0 -0
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/vite/smooConfigPlugin.ts
21
+ var smooConfigPlugin_exports = {};
22
+ __export(smooConfigPlugin_exports, {
23
+ smooConfigPlugin: () => smooConfigPlugin
24
+ });
25
+ module.exports = __toCommonJS(smooConfigPlugin_exports);
26
+ function toUpperSnakeCase(key) {
27
+ return key.replace(/([A-Z])/g, "_$1").toUpperCase();
28
+ }
29
+ function smooConfigPlugin(options) {
30
+ return {
31
+ name: "smoo-config",
32
+ config() {
33
+ const envVars = {};
34
+ if (options.featureFlags) {
35
+ for (const [key, value] of Object.entries(options.featureFlags)) {
36
+ const envKey = `VITE_FEATURE_FLAG_${toUpperSnakeCase(key)}`;
37
+ envVars[envKey] = String(value);
38
+ process.env[envKey] = String(value);
39
+ }
40
+ }
41
+ if (options.publicConfig) {
42
+ for (const [key, value] of Object.entries(options.publicConfig)) {
43
+ const envKey = `VITE_CONFIG_${toUpperSnakeCase(key)}`;
44
+ envVars[envKey] = String(value);
45
+ process.env[envKey] = String(value);
46
+ }
47
+ }
48
+ const define = {};
49
+ for (const [key, value] of Object.entries(envVars)) {
50
+ define[`import.meta.env.${key}`] = JSON.stringify(value);
51
+ }
52
+ return { define };
53
+ }
54
+ };
55
+ }
56
+ // Annotate the CommonJS export names for ESM import in node:
57
+ 0 && (module.exports = {
58
+ smooConfigPlugin
59
+ });
60
+ //# sourceMappingURL=smooConfigPlugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/vite/smooConfigPlugin.ts"],"sourcesContent":["/**\n * Vite plugin that injects feature flags and public config as\n * VITE_FEATURE_FLAG_* and VITE_CONFIG_* environment variables.\n *\n * @example\n * ```ts\n * // vite.config.ts\n * import { smooConfigPlugin } from '@smooai/config/vite/smooConfigPlugin';\n *\n * export default defineConfig({\n * plugins: [\n * smooConfigPlugin({\n * featureFlags: { aboutPage: true, contactPage: false },\n * publicConfig: { apiBaseUrl: 'http://localhost:3000' },\n * stage: 'development',\n * }),\n * ],\n * });\n * ```\n *\n * Then in client code:\n * ```tsx\n * import { getClientFeatureFlag, getClientPublicConfig } from '@smooai/config/client';\n * const isEnabled = getClientFeatureFlag('aboutPage');\n * const apiUrl = getClientPublicConfig('apiBaseUrl');\n * ```\n */\n\nimport type { Plugin } from 'vite';\n\nexport interface SmooConfigPluginOptions {\n /** Feature flag values (boolean). */\n featureFlags?: Record<string, boolean>;\n /** Public config values (string, number, or boolean). */\n publicConfig?: Record<string, string | number | boolean>;\n /** Optional stage name — currently informational; config resolution should happen before calling the plugin. */\n stage?: string;\n}\n\n/**\n * Convert a camelCase key to UPPER_SNAKE_CASE.\n * e.g., \"aboutPage\" → \"ABOUT_PAGE\"\n */\nfunction toUpperSnakeCase(key: string): string {\n return key.replace(/([A-Z])/g, '_$1').toUpperCase();\n}\n\n/**\n * Vite plugin that injects feature flags and public config as environment variables.\n *\n * Sets `process.env.VITE_FEATURE_FLAG_*` and `process.env.VITE_CONFIG_*` in the\n * Vite `config` hook so they are available at build time via `import.meta.env`.\n */\nexport function smooConfigPlugin(options: SmooConfigPluginOptions): Plugin {\n return {\n name: 'smoo-config',\n config() {\n const envVars: Record<string, string> = {};\n\n // Feature flags → VITE_FEATURE_FLAG_*\n if (options.featureFlags) {\n for (const [key, value] of Object.entries(options.featureFlags)) {\n const envKey = `VITE_FEATURE_FLAG_${toUpperSnakeCase(key)}`;\n envVars[envKey] = String(value);\n process.env[envKey] = String(value);\n }\n }\n\n // Public config → VITE_CONFIG_*\n if (options.publicConfig) {\n for (const [key, value] of Object.entries(options.publicConfig)) {\n const envKey = `VITE_CONFIG_${toUpperSnakeCase(key)}`;\n envVars[envKey] = String(value);\n process.env[envKey] = String(value);\n }\n }\n\n // Return define map so Vite replaces these at build time\n const define: Record<string, string> = {};\n for (const [key, value] of Object.entries(envVars)) {\n define[`import.meta.env.${key}`] = JSON.stringify(value);\n }\n\n return { define };\n },\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AA2CA,SAAS,iBAAiB,KAAqB;AAC3C,SAAO,IAAI,QAAQ,YAAY,KAAK,EAAE,YAAY;AACtD;AAQO,SAAS,iBAAiB,SAA0C;AACvE,SAAO;AAAA,IACH,MAAM;AAAA,IACN,SAAS;AACL,YAAM,UAAkC,CAAC;AAGzC,UAAI,QAAQ,cAAc;AACtB,mBAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,QAAQ,YAAY,GAAG;AAC7D,gBAAM,SAAS,qBAAqB,iBAAiB,GAAG,CAAC;AACzD,kBAAQ,MAAM,IAAI,OAAO,KAAK;AAC9B,kBAAQ,IAAI,MAAM,IAAI,OAAO,KAAK;AAAA,QACtC;AAAA,MACJ;AAGA,UAAI,QAAQ,cAAc;AACtB,mBAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,QAAQ,YAAY,GAAG;AAC7D,gBAAM,SAAS,eAAe,iBAAiB,GAAG,CAAC;AACnD,kBAAQ,MAAM,IAAI,OAAO,KAAK;AAC9B,kBAAQ,IAAI,MAAM,IAAI,OAAO,KAAK;AAAA,QACtC;AAAA,MACJ;AAGA,YAAM,SAAiC,CAAC;AACxC,iBAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,OAAO,GAAG;AAChD,eAAO,mBAAmB,GAAG,EAAE,IAAI,KAAK,UAAU,KAAK;AAAA,MAC3D;AAEA,aAAO,EAAE,OAAO;AAAA,IACpB;AAAA,EACJ;AACJ;","names":[]}
@@ -0,0 +1,37 @@
1
+ import "../chunk-J5LGTIGS.mjs";
2
+
3
+ // src/vite/smooConfigPlugin.ts
4
+ function toUpperSnakeCase(key) {
5
+ return key.replace(/([A-Z])/g, "_$1").toUpperCase();
6
+ }
7
+ function smooConfigPlugin(options) {
8
+ return {
9
+ name: "smoo-config",
10
+ config() {
11
+ const envVars = {};
12
+ if (options.featureFlags) {
13
+ for (const [key, value] of Object.entries(options.featureFlags)) {
14
+ const envKey = `VITE_FEATURE_FLAG_${toUpperSnakeCase(key)}`;
15
+ envVars[envKey] = String(value);
16
+ process.env[envKey] = String(value);
17
+ }
18
+ }
19
+ if (options.publicConfig) {
20
+ for (const [key, value] of Object.entries(options.publicConfig)) {
21
+ const envKey = `VITE_CONFIG_${toUpperSnakeCase(key)}`;
22
+ envVars[envKey] = String(value);
23
+ process.env[envKey] = String(value);
24
+ }
25
+ }
26
+ const define = {};
27
+ for (const [key, value] of Object.entries(envVars)) {
28
+ define[`import.meta.env.${key}`] = JSON.stringify(value);
29
+ }
30
+ return { define };
31
+ }
32
+ };
33
+ }
34
+ export {
35
+ smooConfigPlugin
36
+ };
37
+ //# sourceMappingURL=smooConfigPlugin.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/vite/smooConfigPlugin.ts"],"sourcesContent":["/**\n * Vite plugin that injects feature flags and public config as\n * VITE_FEATURE_FLAG_* and VITE_CONFIG_* environment variables.\n *\n * @example\n * ```ts\n * // vite.config.ts\n * import { smooConfigPlugin } from '@smooai/config/vite/smooConfigPlugin';\n *\n * export default defineConfig({\n * plugins: [\n * smooConfigPlugin({\n * featureFlags: { aboutPage: true, contactPage: false },\n * publicConfig: { apiBaseUrl: 'http://localhost:3000' },\n * stage: 'development',\n * }),\n * ],\n * });\n * ```\n *\n * Then in client code:\n * ```tsx\n * import { getClientFeatureFlag, getClientPublicConfig } from '@smooai/config/client';\n * const isEnabled = getClientFeatureFlag('aboutPage');\n * const apiUrl = getClientPublicConfig('apiBaseUrl');\n * ```\n */\n\nimport type { Plugin } from 'vite';\n\nexport interface SmooConfigPluginOptions {\n /** Feature flag values (boolean). */\n featureFlags?: Record<string, boolean>;\n /** Public config values (string, number, or boolean). */\n publicConfig?: Record<string, string | number | boolean>;\n /** Optional stage name — currently informational; config resolution should happen before calling the plugin. */\n stage?: string;\n}\n\n/**\n * Convert a camelCase key to UPPER_SNAKE_CASE.\n * e.g., \"aboutPage\" → \"ABOUT_PAGE\"\n */\nfunction toUpperSnakeCase(key: string): string {\n return key.replace(/([A-Z])/g, '_$1').toUpperCase();\n}\n\n/**\n * Vite plugin that injects feature flags and public config as environment variables.\n *\n * Sets `process.env.VITE_FEATURE_FLAG_*` and `process.env.VITE_CONFIG_*` in the\n * Vite `config` hook so they are available at build time via `import.meta.env`.\n */\nexport function smooConfigPlugin(options: SmooConfigPluginOptions): Plugin {\n return {\n name: 'smoo-config',\n config() {\n const envVars: Record<string, string> = {};\n\n // Feature flags → VITE_FEATURE_FLAG_*\n if (options.featureFlags) {\n for (const [key, value] of Object.entries(options.featureFlags)) {\n const envKey = `VITE_FEATURE_FLAG_${toUpperSnakeCase(key)}`;\n envVars[envKey] = String(value);\n process.env[envKey] = String(value);\n }\n }\n\n // Public config → VITE_CONFIG_*\n if (options.publicConfig) {\n for (const [key, value] of Object.entries(options.publicConfig)) {\n const envKey = `VITE_CONFIG_${toUpperSnakeCase(key)}`;\n envVars[envKey] = String(value);\n process.env[envKey] = String(value);\n }\n }\n\n // Return define map so Vite replaces these at build time\n const define: Record<string, string> = {};\n for (const [key, value] of Object.entries(envVars)) {\n define[`import.meta.env.${key}`] = JSON.stringify(value);\n }\n\n return { define };\n },\n };\n}\n"],"mappings":";;;AA2CA,SAAS,iBAAiB,KAAqB;AAC3C,SAAO,IAAI,QAAQ,YAAY,KAAK,EAAE,YAAY;AACtD;AAQO,SAAS,iBAAiB,SAA0C;AACvE,SAAO;AAAA,IACH,MAAM;AAAA,IACN,SAAS;AACL,YAAM,UAAkC,CAAC;AAGzC,UAAI,QAAQ,cAAc;AACtB,mBAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,QAAQ,YAAY,GAAG;AAC7D,gBAAM,SAAS,qBAAqB,iBAAiB,GAAG,CAAC;AACzD,kBAAQ,MAAM,IAAI,OAAO,KAAK;AAC9B,kBAAQ,IAAI,MAAM,IAAI,OAAO,KAAK;AAAA,QACtC;AAAA,MACJ;AAGA,UAAI,QAAQ,cAAc;AACtB,mBAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,QAAQ,YAAY,GAAG;AAC7D,gBAAM,SAAS,eAAe,iBAAiB,GAAG,CAAC;AACnD,kBAAQ,MAAM,IAAI,OAAO,KAAK;AAC9B,kBAAQ,IAAI,MAAM,IAAI,OAAO,KAAK;AAAA,QACtC;AAAA,MACJ;AAGA,YAAM,SAAiC,CAAC;AACxC,iBAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,OAAO,GAAG;AAChD,eAAO,mBAAmB,GAAG,EAAE,IAAI,KAAK,UAAU,KAAK;AAAA,MAC3D;AAEA,aAAO,EAAE,OAAO;AAAA,IACpB;AAAA,EACJ;AACJ;","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@smooai/config",
3
- "version": "3.0.0",
3
+ "version": "3.1.0",
4
4
  "description": "Type-safe multi-language configuration management with schema validation, three-tier config (public, secret, feature flags), and runtime client support for TypeScript, Python, Rust, and Go.",
5
5
  "homepage": "https://github.com/SmooAI/config#readme",
6
6
  "bugs": {
@@ -72,6 +72,30 @@
72
72
  "import": "./dist/nextjs/getConfig.mjs",
73
73
  "require": "./dist/nextjs/getConfig.js"
74
74
  },
75
+ "./nextjs/withFeatureFlags": {
76
+ "types": "./dist/nextjs/withFeatureFlags.d.ts",
77
+ "import": "./dist/nextjs/withFeatureFlags.mjs",
78
+ "require": "./dist/nextjs/withFeatureFlags.js"
79
+ },
80
+ "./nextjs/withSmooConfig": {
81
+ "types": "./dist/nextjs/withSmooConfig.d.ts",
82
+ "import": "./dist/nextjs/withSmooConfig.mjs",
83
+ "require": "./dist/nextjs/withSmooConfig.js"
84
+ },
85
+ "./client": {
86
+ "types": "./dist/client/index.d.ts",
87
+ "browser": {
88
+ "types": "./dist/client/index.d.ts",
89
+ "import": "./dist/browser/client/index.mjs"
90
+ },
91
+ "import": "./dist/client/index.mjs",
92
+ "require": "./dist/client/index.js"
93
+ },
94
+ "./vite/smooConfigPlugin": {
95
+ "types": "./dist/vite/smooConfigPlugin.d.ts",
96
+ "import": "./dist/vite/smooConfigPlugin.mjs",
97
+ "require": "./dist/vite/smooConfigPlugin.js"
98
+ },
75
99
  "./feature-flags": {
76
100
  "types": "./dist/feature-flags/index.d.ts",
77
101
  "browser": {