stampd 0.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 (130) hide show
  1. package/README.md +611 -0
  2. package/dist/analyzer/analyzeStyle.d.ts +13 -0
  3. package/dist/analyzer/analyzeStyle.d.ts.map +1 -0
  4. package/dist/analyzer/analyzeStyle.js +43 -0
  5. package/dist/analyzer/analyzeStyle.js.map +1 -0
  6. package/dist/analyzer/classifyValue.d.ts +7 -0
  7. package/dist/analyzer/classifyValue.d.ts.map +1 -0
  8. package/dist/analyzer/classifyValue.js +30 -0
  9. package/dist/analyzer/classifyValue.js.map +1 -0
  10. package/dist/analyzer/isThemeAccess.d.ts +7 -0
  11. package/dist/analyzer/isThemeAccess.d.ts.map +1 -0
  12. package/dist/analyzer/isThemeAccess.js +17 -0
  13. package/dist/analyzer/isThemeAccess.js.map +1 -0
  14. package/dist/cli/runTransform.d.ts +2 -0
  15. package/dist/cli/runTransform.d.ts.map +1 -0
  16. package/dist/cli/runTransform.js +55 -0
  17. package/dist/cli/runTransform.js.map +1 -0
  18. package/dist/config/createTheme.d.ts +101 -0
  19. package/dist/config/createTheme.d.ts.map +1 -0
  20. package/dist/config/createTheme.js +61 -0
  21. package/dist/config/createTheme.js.map +1 -0
  22. package/dist/config/generateTypes.d.ts +2 -0
  23. package/dist/config/generateTypes.d.ts.map +1 -0
  24. package/dist/config/generateTypes.js +103 -0
  25. package/dist/config/generateTypes.js.map +1 -0
  26. package/dist/config/loadStyledConfig.d.ts +13 -0
  27. package/dist/config/loadStyledConfig.d.ts.map +1 -0
  28. package/dist/config/loadStyledConfig.js +175 -0
  29. package/dist/config/loadStyledConfig.js.map +1 -0
  30. package/dist/context/Provider.d.ts +40 -0
  31. package/dist/context/Provider.d.ts.map +1 -0
  32. package/dist/context/Provider.js +141 -0
  33. package/dist/context/Provider.js.map +1 -0
  34. package/dist/core/shouldTransform.d.ts +6 -0
  35. package/dist/core/shouldTransform.d.ts.map +1 -0
  36. package/dist/core/shouldTransform.js +28 -0
  37. package/dist/core/shouldTransform.js.map +1 -0
  38. package/dist/detectors/isStyledCall.d.ts +10 -0
  39. package/dist/detectors/isStyledCall.d.ts.map +1 -0
  40. package/dist/detectors/isStyledCall.js +20 -0
  41. package/dist/detectors/isStyledCall.js.map +1 -0
  42. package/dist/detectors/isStyledImported.d.ts +9 -0
  43. package/dist/detectors/isStyledImported.d.ts.map +1 -0
  44. package/dist/detectors/isStyledImported.js +27 -0
  45. package/dist/detectors/isStyledImported.js.map +1 -0
  46. package/dist/extractors/extractAttrs.d.ts +13 -0
  47. package/dist/extractors/extractAttrs.d.ts.map +1 -0
  48. package/dist/extractors/extractAttrs.js +40 -0
  49. package/dist/extractors/extractAttrs.js.map +1 -0
  50. package/dist/extractors/extractStyle.d.ts +24 -0
  51. package/dist/extractors/extractStyle.d.ts.map +1 -0
  52. package/dist/extractors/extractStyle.js +57 -0
  53. package/dist/extractors/extractStyle.js.map +1 -0
  54. package/dist/extractors/extractVariants.d.ts +11 -0
  55. package/dist/extractors/extractVariants.d.ts.map +1 -0
  56. package/dist/extractors/extractVariants.js +31 -0
  57. package/dist/extractors/extractVariants.js.map +1 -0
  58. package/dist/extractors/getStyledConfig.d.ts +9 -0
  59. package/dist/extractors/getStyledConfig.d.ts.map +1 -0
  60. package/dist/extractors/getStyledConfig.js +17 -0
  61. package/dist/extractors/getStyledConfig.js.map +1 -0
  62. package/dist/index.d.ts +7 -0
  63. package/dist/index.d.ts.map +1 -0
  64. package/dist/index.js +36 -0
  65. package/dist/index.js.map +1 -0
  66. package/dist/runtime/Styled.d.ts +48 -0
  67. package/dist/runtime/Styled.d.ts.map +1 -0
  68. package/dist/runtime/Styled.js +17 -0
  69. package/dist/runtime/Styled.js.map +1 -0
  70. package/dist/theme/astFromValue.d.ts +3 -0
  71. package/dist/theme/astFromValue.d.ts.map +1 -0
  72. package/dist/theme/astFromValue.js +22 -0
  73. package/dist/theme/astFromValue.js.map +1 -0
  74. package/dist/theme/extractThemePath.d.ts +7 -0
  75. package/dist/theme/extractThemePath.d.ts.map +1 -0
  76. package/dist/theme/extractThemePath.js +21 -0
  77. package/dist/theme/extractThemePath.js.map +1 -0
  78. package/dist/theme/resolveExpression.d.ts +7 -0
  79. package/dist/theme/resolveExpression.d.ts.map +1 -0
  80. package/dist/theme/resolveExpression.js +46 -0
  81. package/dist/theme/resolveExpression.js.map +1 -0
  82. package/dist/theme/resolveThemeInStyle.d.ts +6 -0
  83. package/dist/theme/resolveThemeInStyle.d.ts.map +1 -0
  84. package/dist/theme/resolveThemeInStyle.js +26 -0
  85. package/dist/theme/resolveThemeInStyle.js.map +1 -0
  86. package/dist/theme/resolveThemePath.d.ts +8 -0
  87. package/dist/theme/resolveThemePath.d.ts.map +1 -0
  88. package/dist/theme/resolveThemePath.js +22 -0
  89. package/dist/theme/resolveThemePath.js.map +1 -0
  90. package/dist/transformers/transformStyled.d.ts +7 -0
  91. package/dist/transformers/transformStyled.d.ts.map +1 -0
  92. package/dist/transformers/transformStyled.js +104 -0
  93. package/dist/transformers/transformStyled.js.map +1 -0
  94. package/dist/transformers/transformStyledWithVariants.d.ts +22 -0
  95. package/dist/transformers/transformStyledWithVariants.d.ts.map +1 -0
  96. package/dist/transformers/transformStyledWithVariants.js +197 -0
  97. package/dist/transformers/transformStyledWithVariants.js.map +1 -0
  98. package/dist/utils/buildDefaultVariantsAST.d.ts +3 -0
  99. package/dist/utils/buildDefaultVariantsAST.d.ts.map +1 -0
  100. package/dist/utils/buildDefaultVariantsAST.js +41 -0
  101. package/dist/utils/buildDefaultVariantsAST.js.map +1 -0
  102. package/dist/utils/buildVariantsObjectAST.d.ts +3 -0
  103. package/dist/utils/buildVariantsObjectAST.d.ts.map +1 -0
  104. package/dist/utils/buildVariantsObjectAST.js +43 -0
  105. package/dist/utils/buildVariantsObjectAST.js.map +1 -0
  106. package/dist/utils/defaultFontStyle.d.ts +8 -0
  107. package/dist/utils/defaultFontStyle.d.ts.map +1 -0
  108. package/dist/utils/defaultFontStyle.js +32 -0
  109. package/dist/utils/defaultFontStyle.js.map +1 -0
  110. package/dist/utils/ensureImport.d.ts +13 -0
  111. package/dist/utils/ensureImport.d.ts.map +1 -0
  112. package/dist/utils/ensureImport.js +76 -0
  113. package/dist/utils/ensureImport.js.map +1 -0
  114. package/dist/utils/getProgramPath.d.ts +6 -0
  115. package/dist/utils/getProgramPath.d.ts.map +1 -0
  116. package/dist/utils/getProgramPath.js +10 -0
  117. package/dist/utils/getProgramPath.js.map +1 -0
  118. package/dist/utils/nodeHasPlatformSelect.d.ts +3 -0
  119. package/dist/utils/nodeHasPlatformSelect.d.ts.map +1 -0
  120. package/dist/utils/nodeHasPlatformSelect.js +37 -0
  121. package/dist/utils/nodeHasPlatformSelect.js.map +1 -0
  122. package/dist/utils/nodeHasThemeAccess.d.ts +7 -0
  123. package/dist/utils/nodeHasThemeAccess.d.ts.map +1 -0
  124. package/dist/utils/nodeHasThemeAccess.js +36 -0
  125. package/dist/utils/nodeHasThemeAccess.js.map +1 -0
  126. package/dist/utils/replaceParamWithProps.d.ts +7 -0
  127. package/dist/utils/replaceParamWithProps.d.ts.map +1 -0
  128. package/dist/utils/replaceParamWithProps.js +34 -0
  129. package/dist/utils/replaceParamWithProps.js.map +1 -0
  130. package/package.json +95 -0
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.classifyValue = classifyValue;
4
+ // plugins/src/analyzer/classifyValue.ts
5
+ const core_1 = require("@babel/core");
6
+ const isThemeAccess_1 = require("./isThemeAccess");
7
+ /**
8
+ * Classifica um valor dentro do style
9
+ */
10
+ function classifyValue(node) {
11
+ // 🔹 valores estáticos
12
+ if (core_1.types.isStringLiteral(node) ||
13
+ core_1.types.isNumericLiteral(node) ||
14
+ core_1.types.isBooleanLiteral(node)) {
15
+ return "STATIC";
16
+ }
17
+ // 🔹 theme.xxx.xxx
18
+ if (core_1.types.isMemberExpression(node) && (0, isThemeAccess_1.isThemeAccess)(node)) {
19
+ return "THEME";
20
+ }
21
+ // 🔹 spread (...theme)
22
+ if (core_1.types.isSpreadElement(node)) {
23
+ if ((0, isThemeAccess_1.isThemeAccess)(node.argument)) {
24
+ return "THEME";
25
+ }
26
+ }
27
+ // 🔴 qualquer outra coisa = dinâmica
28
+ return "DYNAMIC";
29
+ }
30
+ //# sourceMappingURL=classifyValue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"classifyValue.js","sourceRoot":"","sources":["../../src/analyzer/classifyValue.ts"],"names":[],"mappings":";;AASA,sCAwBC;AAjCD,wCAAwC;AACxC,sCAAyC;AACzC,mDAAgD;AAIhD;;GAEG;AACH,SAAgB,aAAa,CAAC,IAAY;IACxC,uBAAuB;IACvB,IACE,YAAC,CAAC,eAAe,CAAC,IAAI,CAAC;QACvB,YAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC;QACxB,YAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC,EACxB,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,mBAAmB;IACnB,IAAI,YAAC,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,IAAA,6BAAa,EAAC,IAAI,CAAC,EAAE,CAAC;QACtD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,uBAAuB;IACvB,IAAI,YAAC,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5B,IAAI,IAAA,6BAAa,EAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YACjC,OAAO,OAAO,CAAC;QACjB,CAAC;IACH,CAAC;IAED,qCAAqC;IACrC,OAAO,SAAS,CAAC;AACnB,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { types as t } from "@babel/core";
2
+ /**
3
+ * Verifica se é algo tipo:
4
+ * theme.colors.primary
5
+ */
6
+ export declare function isThemeAccess(node: t.Node): boolean;
7
+ //# sourceMappingURL=isThemeAccess.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isThemeAccess.d.ts","sourceRoot":"","sources":["../../src/analyzer/isThemeAccess.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,IAAI,CAAC,EAAE,MAAM,aAAa,CAAC;AAEzC;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,GAAG,OAAO,CAQnD"}
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isThemeAccess = isThemeAccess;
4
+ // plugins/src/analyzer/isThemeAccess.ts
5
+ const core_1 = require("@babel/core");
6
+ /**
7
+ * Verifica se é algo tipo:
8
+ * theme.colors.primary
9
+ */
10
+ function isThemeAccess(node) {
11
+ let current = node;
12
+ while (core_1.types.isMemberExpression(current)) {
13
+ current = current.object;
14
+ }
15
+ return core_1.types.isIdentifier(current, { name: "theme" });
16
+ }
17
+ //# sourceMappingURL=isThemeAccess.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isThemeAccess.js","sourceRoot":"","sources":["../../src/analyzer/isThemeAccess.ts"],"names":[],"mappings":";;AAOA,sCAQC;AAfD,wCAAwC;AACxC,sCAAyC;AAEzC;;;GAGG;AACH,SAAgB,aAAa,CAAC,IAAY;IACxC,IAAI,OAAO,GAAQ,IAAI,CAAC;IAExB,OAAO,YAAC,CAAC,kBAAkB,CAAC,OAAO,CAAC,EAAE,CAAC;QACrC,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC;IAC3B,CAAC;IAED,OAAO,YAAC,CAAC,YAAY,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;AACpD,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=runTransform.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runTransform.d.ts","sourceRoot":"","sources":["../../src/cli/runTransform.ts"],"names":[],"mappings":""}
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ // plugins/src/cli/runTransform.ts
7
+ const fs_1 = __importDefault(require("fs"));
8
+ const path_1 = __importDefault(require("path"));
9
+ const core_1 = require("@babel/core");
10
+ const index_1 = __importDefault(require("../index"));
11
+ function parseArgs() {
12
+ const [input, output, config] = process.argv.slice(2);
13
+ return {
14
+ inputPath: path_1.default.resolve(input || "test/input.tsx"),
15
+ outputPath: path_1.default.resolve(output || "test/output.js"),
16
+ configPath: config ? path_1.default.resolve(config) : undefined,
17
+ };
18
+ }
19
+ function run() {
20
+ const { inputPath, outputPath, configPath } = parseArgs();
21
+ if (!fs_1.default.existsSync(inputPath)) {
22
+ console.error("❌ Arquivo não encontrado:", inputPath);
23
+ process.exit(1);
24
+ }
25
+ if (configPath) {
26
+ if (!fs_1.default.existsSync(configPath)) {
27
+ console.error("❌ Config não encontrado:", configPath);
28
+ process.exit(1);
29
+ }
30
+ process.env.STYLED_CONFIG_PATH = configPath;
31
+ }
32
+ const code = fs_1.default.readFileSync(inputPath, "utf-8");
33
+ const result = (0, core_1.transformSync)(code, {
34
+ filename: inputPath,
35
+ presets: [require.resolve("@babel/preset-typescript")],
36
+ plugins: [index_1.default],
37
+ compact: false,
38
+ comments: true,
39
+ retainLines: true,
40
+ assumptions: { setPublicClassFields: true },
41
+ sourceMaps: false,
42
+ babelrc: false,
43
+ configFile: false,
44
+ });
45
+ if (!(result === null || result === void 0 ? void 0 : result.code)) {
46
+ console.error("❌ Falha na transformação");
47
+ process.exit(1);
48
+ }
49
+ fs_1.default.mkdirSync(path_1.default.dirname(outputPath), { recursive: true });
50
+ fs_1.default.writeFileSync(outputPath, result.code);
51
+ console.log("✅ Transformado com sucesso!");
52
+ console.log("📄 Output:", outputPath);
53
+ }
54
+ run();
55
+ //# sourceMappingURL=runTransform.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runTransform.js","sourceRoot":"","sources":["../../src/cli/runTransform.ts"],"names":[],"mappings":";;;;;AAAA,kCAAkC;AAClC,4CAAoB;AACpB,gDAAwB;AACxB,sCAA4C;AAC5C,qDAAoC;AAEpC,SAAS,SAAS;IAChB,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACtD,OAAO;QACL,SAAS,EAAG,cAAI,CAAC,OAAO,CAAC,KAAK,IAAK,gBAAgB,CAAC;QACpD,UAAU,EAAE,cAAI,CAAC,OAAO,CAAC,MAAM,IAAI,gBAAgB,CAAC;QACpD,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,cAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS;KACtD,CAAC;AACJ,CAAC;AAED,SAAS,GAAG;IACV,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,SAAS,EAAE,CAAC;IAE1D,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC9B,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,SAAS,CAAC,CAAC;QACtD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,UAAU,EAAE,CAAC;QACf,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC/B,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,UAAU,CAAC,CAAC;YACtD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,kBAAkB,GAAG,UAAU,CAAC;IAC9C,CAAC;IAED,MAAM,IAAI,GAAG,YAAE,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAEjD,MAAM,MAAM,GAAG,IAAA,oBAAa,EAAC,IAAI,EAAE;QACjC,QAAQ,EAAE,SAAS;QACnB,OAAO,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAC;QACtD,OAAO,EAAE,CAAC,eAAY,CAAC;QACvB,OAAO,EAAE,KAAK;QACd,QAAQ,EAAE,IAAI;QACd,WAAW,EAAE,IAAI;QACjB,WAAW,EAAE,EAAE,oBAAoB,EAAE,IAAI,EAAE;QAC3C,UAAU,EAAE,KAAK;QACjB,OAAO,EAAE,KAAK;QACd,UAAU,EAAE,KAAK;KAClB,CAAC,CAAC;IAEH,IAAI,CAAC,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,IAAI,CAAA,EAAE,CAAC;QAClB,OAAO,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAC1C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,YAAE,CAAC,SAAS,CAAC,cAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5D,YAAE,CAAC,aAAa,CAAC,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;IAE1C,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;IAC3C,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;AACxC,CAAC;AAED,GAAG,EAAE,CAAC"}
@@ -0,0 +1,101 @@
1
+ /** Torna todas as propriedades de um objeto opcionais, recursivamente. */
2
+ export type DeepPartial<T> = T extends object ? {
3
+ [K in keyof T]?: DeepPartial<T[K]>;
4
+ } : T;
5
+ /**
6
+ * Shape esperado de `fonts` no config.
7
+ * - `default`: fonte e tamanho padrão da aplicação
8
+ * - `sizes`: escala de tamanhos nomeados (ex: sm, md, lg)
9
+ * - `family`: famílias de fontes nomeadas (ex: inter, mono)
10
+ */
11
+ export type FontsConfig<TSizes extends Record<string, number> = Record<string, number>, TFamily extends Record<string, string> = Record<string, string>> = {
12
+ default?: {
13
+ size?: number;
14
+ family?: string;
15
+ };
16
+ sizes?: TSizes;
17
+ family?: TFamily;
18
+ };
19
+ /**
20
+ * Merge de tokens com o tema ativo: chaves do tema sobrescrevem as dos tokens.
21
+ * `fonts` é adicionado como `theme.fonts` (estático, não muda com light/dark).
22
+ */
23
+ export type InferTheme<T> = T extends {
24
+ tokens: infer Tok;
25
+ theme: {
26
+ light: infer L;
27
+ };
28
+ fonts?: infer F;
29
+ } ? Tok extends object ? L extends object ? Omit<Tok, keyof L> & L & (F extends object ? {
30
+ fonts: F;
31
+ } : {}) : Tok : never : never;
32
+ /**
33
+ * Garante que dark e light possuam exatamente as mesmas chaves (em cada nível).
34
+ * TypeScript aponta erro de compile se dark estiver com chaves a menos.
35
+ */
36
+ type EnsureSameStructure<TLight, TDark extends TLight> = TDark;
37
+ /**
38
+ * Define o tema da aplicação com validação de tipagem e consistência.
39
+ *
40
+ * - `tokens`: valores estáticos resolvidos em compile-time pelo plugin Babel.
41
+ * - `theme.light` / `theme.dark`: variantes de runtime (dark/light switch).
42
+ *
43
+ * TypeScript garante em compile-time que `dark` possui pelo menos as mesmas
44
+ * chaves de `light`. A validação em runtime verifica chaves extras e aninha.
45
+ *
46
+ * @example
47
+ * export const config = createTheme({
48
+ * tokens: { colors: lightColors, spacing, radius, typography, shadows, size },
49
+ * theme: {
50
+ * light: { colors: lightColors },
51
+ * dark: { colors: darkColors },
52
+ * },
53
+ * });
54
+ *
55
+ * export type AppTheme = InferTheme<typeof config>;
56
+ */
57
+ export declare function createTheme<TTokens extends object, TLight extends object, TDark extends TLight, TFonts extends FontsConfig = FontsConfig>(config: {
58
+ tokens: TTokens;
59
+ theme: {
60
+ light: TLight;
61
+ dark: EnsureSameStructure<TLight, TDark>;
62
+ /**
63
+ * Sobrescreve cores para alto contraste — apenas as chaves presentes são aplicadas.
64
+ * Cada propriedade é opcional (DeepPartial do light theme).
65
+ */
66
+ highContrast?: DeepPartial<TLight>;
67
+ };
68
+ /**
69
+ * Configuração de fontes estáticas — acessível como `theme.fonts`.
70
+ * @example
71
+ * fonts: {
72
+ * default: { size: 14, family: "Inter" },
73
+ * sizes: { sm: 12, md: 14, lg: 16 },
74
+ * family: { inter: "Inter", mono: "JetBrainsMono" },
75
+ * }
76
+ */
77
+ fonts?: TFonts;
78
+ }): {
79
+ tokens: TTokens;
80
+ theme: {
81
+ light: TLight;
82
+ dark: EnsureSameStructure<TLight, TDark>;
83
+ /**
84
+ * Sobrescreve cores para alto contraste — apenas as chaves presentes são aplicadas.
85
+ * Cada propriedade é opcional (DeepPartial do light theme).
86
+ */
87
+ highContrast?: DeepPartial<TLight>;
88
+ };
89
+ /**
90
+ * Configuração de fontes estáticas — acessível como `theme.fonts`.
91
+ * @example
92
+ * fonts: {
93
+ * default: { size: 14, family: "Inter" },
94
+ * sizes: { sm: 12, md: 14, lg: 16 },
95
+ * family: { inter: "Inter", mono: "JetBrainsMono" },
96
+ * }
97
+ */
98
+ fonts?: TFonts;
99
+ };
100
+ export {};
101
+ //# sourceMappingURL=createTheme.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createTheme.d.ts","sourceRoot":"","sources":["../../src/config/createTheme.ts"],"names":[],"mappings":"AAIA,0EAA0E;AAC1E,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS,MAAM,GACzC;KAAG,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAAE,GACtC,CAAC,CAAC;AAEN;;;;;GAKG;AACH,MAAM,MAAM,WAAW,CACrB,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC9D,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,IAC7D;IACF,OAAO,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,UAAU,CAAC,CAAC,IAAI,CAAC,SAAS;IACpC,MAAM,EAAE,MAAM,GAAG,CAAC;IAClB,KAAK,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC,CAAA;KAAE,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC,CAAC;CACjB,GACG,GAAG,SAAS,MAAM,GAChB,CAAC,SAAS,MAAM,GACd,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,SAAS,MAAM,GAAG;IAAE,KAAK,EAAE,CAAC,CAAA;CAAE,GAAG,EAAE,CAAC,GAC/D,GAAG,GACL,KAAK,GACP,KAAK,CAAC;AAEV;;;GAGG;AACH,KAAK,mBAAmB,CAAC,MAAM,EAAE,KAAK,SAAS,MAAM,IAAI,KAAK,CAAC;AAmD/D;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,WAAW,CACzB,OAAO,SAAS,MAAM,EACtB,MAAM,SAAS,MAAM,EACrB,KAAK,SAAS,MAAM,EACpB,MAAM,SAAS,WAAW,GAAG,WAAW,EACxC,MAAM,EAAE;IACR,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE;QACL,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,mBAAmB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QACzC;;;WAGG;QACH,YAAY,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;KACpC,CAAC;IACF;;;;;;;;OAQG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;YApBS,OAAO;WACR;QACL,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,mBAAmB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QACzC;;;WAGG;QACH,YAAY,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;KACpC;IACD;;;;;;;;OAQG;YACK,MAAM;EAaf"}
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+ // plugins/src/config/createTheme.tsx
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.createTheme = createTheme;
5
+ // ─── Validação em runtime ─────────────────────────────────────────────────────
6
+ function deepValidateKeys(light, dark, path) {
7
+ const lightKeys = new Set(Object.keys(light));
8
+ const darkKeys = new Set(Object.keys(dark));
9
+ const missingInDark = [...lightKeys].filter((k) => !darkKeys.has(k));
10
+ const extraInDark = [...darkKeys].filter((k) => !lightKeys.has(k));
11
+ let valid = true;
12
+ if (missingInDark.length) {
13
+ console.warn(`\x1b[33m[stampd] ⚠️ dark.${path} está FALTANDO: ${missingInDark.map((k) => `"${k}"`).join(", ")} (existe em light)\x1b[0m`);
14
+ valid = false;
15
+ }
16
+ if (extraInDark.length) {
17
+ console.warn(`\x1b[33m[stampd] ⚠️ dark.${path} tem EXTRAS: ${extraInDark.map((k) => `"${k}"`).join(", ")} (não existe em light)\x1b[0m`);
18
+ valid = false;
19
+ }
20
+ for (const k of lightKeys) {
21
+ if (darkKeys.has(k) &&
22
+ light[k] !== null &&
23
+ dark[k] !== null &&
24
+ typeof light[k] === "object" &&
25
+ typeof dark[k] === "object") {
26
+ const childValid = deepValidateKeys(light[k], dark[k], `${path}.${k}`);
27
+ if (!childValid)
28
+ valid = false;
29
+ }
30
+ }
31
+ return valid;
32
+ }
33
+ // ─── createTheme ─────────────────────────────────────────────────────────────
34
+ /**
35
+ * Define o tema da aplicação com validação de tipagem e consistência.
36
+ *
37
+ * - `tokens`: valores estáticos resolvidos em compile-time pelo plugin Babel.
38
+ * - `theme.light` / `theme.dark`: variantes de runtime (dark/light switch).
39
+ *
40
+ * TypeScript garante em compile-time que `dark` possui pelo menos as mesmas
41
+ * chaves de `light`. A validação em runtime verifica chaves extras e aninha.
42
+ *
43
+ * @example
44
+ * export const config = createTheme({
45
+ * tokens: { colors: lightColors, spacing, radius, typography, shadows, size },
46
+ * theme: {
47
+ * light: { colors: lightColors },
48
+ * dark: { colors: darkColors },
49
+ * },
50
+ * });
51
+ *
52
+ * export type AppTheme = InferTheme<typeof config>;
53
+ */
54
+ function createTheme(config) {
55
+ const isValid = deepValidateKeys(config.theme.light, config.theme.dark, "theme");
56
+ if (isValid) {
57
+ console.log("\x1b[32m[stampd] ✅ Temas light/dark sincronizados\x1b[0m");
58
+ }
59
+ return config;
60
+ }
61
+ //# sourceMappingURL=createTheme.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createTheme.js","sourceRoot":"","sources":["../../src/config/createTheme.ts"],"names":[],"mappings":";AAAA,qCAAqC;;AAmHrC,kCAsCC;AA3GD,iFAAiF;AAEjF,SAAS,gBAAgB,CACvB,KAA8B,EAC9B,IAA6B,EAC7B,IAAY;IAEZ,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAC9C,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAE5C,MAAM,aAAa,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACrE,MAAM,WAAW,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACnE,IAAI,KAAK,GAAG,IAAI,CAAC;IAEjB,IAAI,aAAa,CAAC,MAAM,EAAE,CAAC;QACzB,OAAO,CAAC,IAAI,CACV,6BAA6B,IAAI,mBAAmB,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,2BAA2B,CAC7H,CAAC;QACF,KAAK,GAAG,KAAK,CAAC;IAChB,CAAC;IACD,IAAI,WAAW,CAAC,MAAM,EAAE,CAAC;QACvB,OAAO,CAAC,IAAI,CACV,6BAA6B,IAAI,gBAAgB,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,+BAA+B,CAC5H,CAAC;QACF,KAAK,GAAG,KAAK,CAAC;IAChB,CAAC;IAED,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;QAC1B,IACE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;YACf,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI;YACjB,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI;YAChB,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,QAAQ;YAC5B,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,EAC3B,CAAC;YACD,MAAM,UAAU,GAAG,gBAAgB,CACjC,KAAK,CAAC,CAAC,CAA4B,EACnC,IAAI,CAAC,CAAC,CAA4B,EAClC,GAAG,IAAI,IAAI,CAAC,EAAE,CACf,CAAC;YACF,IAAI,CAAC,UAAU;gBAAE,KAAK,GAAG,KAAK,CAAC;QACjC,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,gFAAgF;AAEhF;;;;;;;;;;;;;;;;;;;GAmBG;AACH,SAAgB,WAAW,CAKzB,MAqBD;IACC,MAAM,OAAO,GAAG,gBAAgB,CAC9B,MAAM,CAAC,KAAK,CAAC,KAAgC,EAC7C,MAAM,CAAC,KAAK,CAAC,IAA+B,EAC5C,OAAO,CACR,CAAC;IAEF,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,CAAC,GAAG,CAAC,0DAA0D,CAAC,CAAC;IAC1E,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function generateThemeTypes(tokens: Record<string, unknown>, lightTheme: Record<string, unknown>, projectRoot: string): void;
2
+ //# sourceMappingURL=generateTypes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generateTypes.d.ts","sourceRoot":"","sources":["../../src/config/generateTypes.ts"],"names":[],"mappings":"AA+CA,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACnC,WAAW,EAAE,MAAM,GAClB,IAAI,CA4BN"}
@@ -0,0 +1,103 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.generateThemeTypes = generateThemeTypes;
37
+ const fs = __importStar(require("fs"));
38
+ const path = __importStar(require("path"));
39
+ const BANNER = `\
40
+ // ⚡ Auto-generated by stampd — do not edit manually.
41
+ // Regenerated automatically when stampd.config.ts changes.
42
+ `;
43
+ // ─── Conversão de valor JS → tipo TypeScript inline ──────────────────────────
44
+ function indent(level) {
45
+ return " ".repeat(level);
46
+ }
47
+ function valueToType(value, level = 0) {
48
+ if (typeof value === "string")
49
+ return `"${value}"`;
50
+ if (typeof value === "number")
51
+ return String(value);
52
+ if (typeof value === "boolean")
53
+ return String(value);
54
+ if (value && typeof value === "object") {
55
+ // Platform.select marker → union dos tipos de cada plataforma
56
+ const v = value;
57
+ if (v.__platformSelect === true) {
58
+ const opts = v.options;
59
+ const variants = Object.values(opts)
60
+ .filter((opt) => opt !== null && opt !== undefined)
61
+ .map((opt) => valueToType(opt, level));
62
+ const unique = [...new Set(variants)];
63
+ return unique.join(" | ");
64
+ }
65
+ const entries = Object.entries(v);
66
+ if (entries.length === 0)
67
+ return "Record<string, never>";
68
+ const props = entries.map(([key, val]) => {
69
+ const safeKey = /^[a-zA-Z_$][\w$]*$/.test(key) ? key : `"${key}"`;
70
+ return `${indent(level + 1)}${safeKey}: ${valueToType(val, level + 1)};`;
71
+ });
72
+ return `{\n${props.join("\n")}\n${indent(level)}}`;
73
+ }
74
+ return "unknown";
75
+ }
76
+ // ─── Geração do arquivo .d.ts ─────────────────────────────────────────────────
77
+ function generateThemeTypes(tokens, lightTheme, projectRoot) {
78
+ const merged = { ...tokens, ...lightTheme };
79
+ const themeType = valueToType(merged, 1);
80
+ const content = `${BANNER}
81
+ export {};
82
+
83
+ declare global {
84
+ namespace StyledSystem {
85
+ interface Theme ${themeType}
86
+ }
87
+ }
88
+ `;
89
+ const outputPath = path.join(projectRoot, "stampd-types.d.ts");
90
+ try {
91
+ const existing = fs.existsSync(outputPath)
92
+ ? fs.readFileSync(outputPath, "utf-8")
93
+ : "";
94
+ if (existing === content)
95
+ return; // nada mudou, não escreve
96
+ fs.writeFileSync(outputPath, content, "utf-8");
97
+ console.log(`\x1b[36m[stampd] 📝 Tipos gerados: ${outputPath}\x1b[0m`);
98
+ }
99
+ catch (e) {
100
+ console.warn("[stampd] Falha ao gerar typed:", e);
101
+ }
102
+ }
103
+ //# sourceMappingURL=generateTypes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generateTypes.js","sourceRoot":"","sources":["../../src/config/generateTypes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Procura `stampd.config.ts` (ou `.js`) na raiz do projeto (process.cwd()),
3
+ * carrega dinamicamente e retorna `config.theme`.
4
+ *
5
+ * O resultado é cacheado — carrega apenas uma vez por processo.
6
+ */
7
+ export declare function loadStyledConfig(): Record<string, any>;
8
+ /**
9
+ * Verifica se um caminho (ex: ['colors', 'primary']) existe em theme.light.
10
+ * Usado para suprimir avisos de paths que são intencionalmente dinâmicos (light/dark).
11
+ */
12
+ export declare function isDynamicThemePath(pathKeys: string[]): boolean;
13
+ //# sourceMappingURL=loadStyledConfig.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loadStyledConfig.d.ts","sourceRoot":"","sources":["../../src/config/loadStyledConfig.ts"],"names":[],"mappings":"AAyFA;;;;;GAKG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CA2CtD;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAS9D"}
@@ -0,0 +1,175 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.loadStyledConfig = loadStyledConfig;
37
+ exports.isDynamicThemePath = isDynamicThemePath;
38
+ const fs = __importStar(require("fs"));
39
+ const path = __importStar(require("path"));
40
+ const babelCore = __importStar(require("@babel/core"));
41
+ const generateTypes_1 = require("./generateTypes");
42
+ // Mock mínimo de react-native para não quebrar módulos que o importam
43
+ const reactNativeMock = {
44
+ Platform: {
45
+ OS: "ios",
46
+ select: (obj) => ({ __platformSelect: true, options: obj }),
47
+ },
48
+ StyleSheet: { create: (s) => s },
49
+ };
50
+ let cachedTheme = null;
51
+ let cachedDynamicTheme = null;
52
+ /**
53
+ * Executa fn() com:
54
+ * - Handlers de `.ts`/`.tsx` que transpilam TypeScript via @babel/core
55
+ * - Mock de `react-native` para evitar erros em tokens de design que importam Platform
56
+ */
57
+ function withTsHandler(fn) {
58
+ const NodeModule = require("module");
59
+ // Salva handlers anteriores
60
+ const prevExt = {
61
+ ".ts": require.extensions[".ts"],
62
+ ".tsx": require.extensions[".tsx"],
63
+ };
64
+ // Salva _load original para restaurar depois
65
+ const originalLoad = NodeModule._load.bind(NodeModule);
66
+ // Handler que transpila TS → CJS via Babel
67
+ const tsHandler = (m, filename) => {
68
+ const code = fs.readFileSync(filename, "utf-8");
69
+ const result = babelCore.transformSync(code, {
70
+ filename,
71
+ configFile: false,
72
+ babelrc: false,
73
+ presets: ["@babel/preset-typescript"],
74
+ plugins: ["@babel/plugin-transform-modules-commonjs"],
75
+ sourceType: "module",
76
+ });
77
+ if (result === null || result === void 0 ? void 0 : result.code) {
78
+ m._compile(result.code, filename);
79
+ }
80
+ };
81
+ // Intercepta react-native e pacotes Expo que não existem em Node.js
82
+ const mockedModules = new Set([
83
+ "react-native",
84
+ "expo-asset",
85
+ "expo-modules-core",
86
+ "expo-font",
87
+ "react-native/Libraries/Utilities/Platform",
88
+ ]);
89
+ NodeModule._load = function (request, parent, isMain) {
90
+ if (request === "react-native" || request.startsWith("react-native/"))
91
+ return reactNativeMock;
92
+ if (mockedModules.has(request))
93
+ return {};
94
+ return originalLoad(request, parent, isMain);
95
+ };
96
+ require.extensions[".ts"] = tsHandler;
97
+ require.extensions[".tsx"] = tsHandler;
98
+ try {
99
+ return fn();
100
+ }
101
+ finally {
102
+ NodeModule._load = originalLoad;
103
+ if (prevExt[".ts"])
104
+ require.extensions[".ts"] = prevExt[".ts"];
105
+ else
106
+ delete require.extensions[".ts"];
107
+ if (prevExt[".tsx"])
108
+ require.extensions[".tsx"] = prevExt[".tsx"];
109
+ else
110
+ delete require.extensions[".tsx"];
111
+ }
112
+ }
113
+ /**
114
+ * Procura `stampd.config.ts` (ou `.js`) na raiz do projeto (process.cwd()),
115
+ * carrega dinamicamente e retorna `config.theme`.
116
+ *
117
+ * O resultado é cacheado — carrega apenas uma vez por processo.
118
+ */
119
+ function loadStyledConfig() {
120
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
121
+ if (cachedTheme !== null)
122
+ return cachedTheme;
123
+ const cwd = process.cwd();
124
+ const candidates = process.env.STYLED_CONFIG_PATH
125
+ ? [process.env.STYLED_CONFIG_PATH]
126
+ : [
127
+ path.join(cwd, "stampd.config.ts"),
128
+ path.join(cwd, "stampd.config.js"),
129
+ ];
130
+ for (const configPath of candidates) {
131
+ if (!fs.existsSync(configPath))
132
+ continue;
133
+ try {
134
+ // Garante leitura fresca (sem cache de run anterior)
135
+ delete require.cache[configPath];
136
+ const mod = withTsHandler(() => require(configPath));
137
+ const raw = (_c = (_a = mod === null || mod === void 0 ? void 0 : mod.config) !== null && _a !== void 0 ? _a : (_b = mod === null || mod === void 0 ? void 0 : mod.default) === null || _b === void 0 ? void 0 : _b.config) !== null && _c !== void 0 ? _c : mod;
138
+ // Novo formato: createTheme({ tokens, theme, fonts }) → usa tokens para compile-time
139
+ // Formato legado: export const config = { theme: { spacing, ... } } → usa theme
140
+ const tokens = (_e = (_d = raw === null || raw === void 0 ? void 0 : raw.tokens) !== null && _d !== void 0 ? _d : raw === null || raw === void 0 ? void 0 : raw.theme) !== null && _e !== void 0 ? _e : null;
141
+ if (tokens) {
142
+ // Inclui fonts em cachedTheme para que theme.fonts.* seja resolvido em compile-time
143
+ const fonts = (_f = raw === null || raw === void 0 ? void 0 : raw.fonts) !== null && _f !== void 0 ? _f : null;
144
+ cachedTheme = fonts ? { ...tokens, fonts } : tokens;
145
+ cachedDynamicTheme = ((_h = (_g = raw === null || raw === void 0 ? void 0 : raw.theme) === null || _g === void 0 ? void 0 : _g.light) !== null && _h !== void 0 ? _h : null);
146
+ console.log(`[stampd] Config carregado de: ${configPath}`);
147
+ (0, generateTypes_1.generateThemeTypes)(cachedTheme, ((_k = (_j = raw === null || raw === void 0 ? void 0 : raw.theme) === null || _j === void 0 ? void 0 : _j.light) !== null && _k !== void 0 ? _k : {}), process.cwd());
148
+ return cachedTheme;
149
+ }
150
+ }
151
+ catch (e) {
152
+ console.warn(`[stampd] Falha ao carregar ${configPath}:`, e);
153
+ }
154
+ }
155
+ console.warn("[stampd] stampd.config.ts não encontrado — resolução de tema desabilitada");
156
+ cachedTheme = {};
157
+ return cachedTheme;
158
+ }
159
+ /**
160
+ * Verifica se um caminho (ex: ['colors', 'primary']) existe em theme.light.
161
+ * Usado para suprimir avisos de paths que são intencionalmente dinâmicos (light/dark).
162
+ */
163
+ function isDynamicThemePath(pathKeys) {
164
+ loadStyledConfig(); // garante que cachedDynamicTheme foi populado
165
+ if (!cachedDynamicTheme)
166
+ return false;
167
+ let node = cachedDynamicTheme;
168
+ for (const key of pathKeys) {
169
+ if (node === null || typeof node !== "object" || !(key in node))
170
+ return false;
171
+ node = node[key];
172
+ }
173
+ return true;
174
+ }
175
+ //# sourceMappingURL=loadStyledConfig.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loadStyledConfig.js","sourceRoot":"","sources":["../../src/config/loadStyledConfig.ts"],"names":[],"mappings":"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"}