@interactivethings/scripts 0.0.8 → 2.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 (49) hide show
  1. package/README.md +210 -12
  2. package/codemods/__testfixtures__/sx-to-use-styles.input.js +50 -0
  3. package/codemods/__testfixtures__/sx-to-use-styles.output.js +59 -0
  4. package/codemods/__tests__/defineTest.ts +9 -0
  5. package/codemods/__tests__/sx-to-use-styles.test.js +3 -0
  6. package/codemods/sx-to-use-styles.js +162 -0
  7. package/dist/__tests__/figma-cli.test.js +189 -0
  8. package/dist/__tests__/tokens-studio-cli.test.js +197 -0
  9. package/dist/__tests__/vercel-cli.test.js +86 -0
  10. package/dist/cli.d.ts +2 -0
  11. package/dist/cli.js +94 -0
  12. package/dist/config.d.ts +78 -0
  13. package/dist/config.js +157 -0
  14. package/dist/figma/api.d.ts +71 -0
  15. package/dist/figma/api.js +175 -0
  16. package/dist/figma/cli.d.ts +20 -0
  17. package/dist/figma/cli.js +153 -0
  18. package/dist/figma/cli.test.js +187 -0
  19. package/dist/figma/images.js +53 -0
  20. package/dist/figma/optimizeImage.js +53 -0
  21. package/dist/figma/utils.d.ts +10 -0
  22. package/dist/figma/utils.js +26 -0
  23. package/dist/index.d.ts +8 -0
  24. package/dist/index.js +43 -0
  25. package/dist/init/cli.d.ts +3 -0
  26. package/dist/init/cli.js +312 -0
  27. package/dist/mui-tokens-studio.js +1 -0
  28. package/dist/plugins/figma/index.js +653 -0
  29. package/dist/plugins/tokens-studio/utils.js +155 -0
  30. package/dist/tokens-studio/__tests__/fixtures/invalid-transformer.js +12 -0
  31. package/dist/tokens-studio/__tests__/fixtures/test-transformer.js +18 -0
  32. package/dist/tokens-studio/cli.d.ts +8 -0
  33. package/dist/tokens-studio/cli.js +119 -0
  34. package/dist/tokens-studio/cli.test.js +150 -0
  35. package/dist/tokens-studio/index.d.ts +14 -0
  36. package/dist/tokens-studio/index.js +46 -0
  37. package/dist/tokens-studio/mui.js +212 -0
  38. package/dist/tokens-studio/require.js +17 -0
  39. package/dist/tokens-studio/tailwind.js +211 -0
  40. package/dist/tokens-studio/types.js +2 -0
  41. package/dist/tokens-studio/utils.d.ts +49 -0
  42. package/dist/tokens-studio/utils.js +156 -0
  43. package/dist/types.d.ts +1 -0
  44. package/dist/vercel/cli.d.ts +4 -0
  45. package/dist/vercel/cli.js +70 -0
  46. package/dist/vercel/cli.test.js +86 -0
  47. package/dist/vercel/deployments.js +42 -0
  48. package/dist/vercel/waitForDeploymentReady.js +43 -0
  49. package/package.json +46 -6
@@ -0,0 +1,155 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.flattenTokens = exports.formatValues = exports.resolveReferences = exports.deepMerge = exports.isToken = exports.maybeParseToPx = exports.maybeParseToNumber = exports.mapEntries = exports.kebabCase = exports.simplifyValues = void 0;
4
+ const remeda_1 = require("remeda");
5
+ /**
6
+ * Shared utility functions for tokens-studio transformations
7
+ */
8
+ /**
9
+ * Simplifies nested token values by extracting the 'value' property
10
+ */
11
+ const simplifyValues = (x) => {
12
+ if (typeof x === "string") {
13
+ return x;
14
+ }
15
+ else if (typeof x === "object" && !!x) {
16
+ if ("value" in x) {
17
+ return x.value;
18
+ }
19
+ else {
20
+ return (0, remeda_1.mapValues)(x, exports.simplifyValues);
21
+ }
22
+ }
23
+ };
24
+ exports.simplifyValues = simplifyValues;
25
+ /**
26
+ * Converts space-separated strings to camelCase
27
+ */
28
+ const kebabCase = (x) => {
29
+ return x
30
+ .split(" ")
31
+ .map((t, i) => {
32
+ if (i === 0) {
33
+ return t.toLowerCase();
34
+ }
35
+ else {
36
+ return `${t[0].toUpperCase()}${t.substring(1).toLowerCase()}`;
37
+ }
38
+ })
39
+ .join("");
40
+ };
41
+ exports.kebabCase = kebabCase;
42
+ /**
43
+ * Maps over object entries with a custom mapper function
44
+ */
45
+ const mapEntries = (obj, mapper) => {
46
+ return Object.fromEntries(Object.entries(obj).map(([key, value]) => mapper(key, value)));
47
+ };
48
+ exports.mapEntries = mapEntries;
49
+ /**
50
+ * Attempts to parse a string or number to a number, returns original if not possible
51
+ */
52
+ const maybeParseToNumber = (x) => {
53
+ const parsed = Number(x);
54
+ if (Number.isNaN(parsed)) {
55
+ return x;
56
+ }
57
+ else {
58
+ return parsed;
59
+ }
60
+ };
61
+ exports.maybeParseToNumber = maybeParseToNumber;
62
+ /**
63
+ * Converts a value to pixels (adds 'px' suffix if it's a number)
64
+ */
65
+ const maybeParseToPx = (x) => {
66
+ if (typeof x === "number") {
67
+ return `${x}px`;
68
+ }
69
+ else {
70
+ return x;
71
+ }
72
+ };
73
+ exports.maybeParseToPx = maybeParseToPx;
74
+ /**
75
+ * Type guard to check if an object is a token with value and type properties
76
+ */
77
+ const isToken = (obj) => {
78
+ return typeof obj === "object" && "value" in obj && "type" in obj;
79
+ };
80
+ exports.isToken = isToken;
81
+ /**
82
+ * Deep merge utility for combining token objects
83
+ */
84
+ const deepMerge = (mergedTokens, tokenData) => {
85
+ for (const key in tokenData) {
86
+ if (tokenData.hasOwnProperty(key)) {
87
+ if (typeof tokenData[key] === "object" &&
88
+ !Array.isArray(tokenData[key]) &&
89
+ tokenData[key] !== null) {
90
+ if (!mergedTokens[key]) {
91
+ mergedTokens[key] = {};
92
+ }
93
+ (0, exports.deepMerge)(mergedTokens[key], tokenData[key]);
94
+ }
95
+ else {
96
+ mergedTokens[key] = tokenData[key];
97
+ }
98
+ }
99
+ }
100
+ };
101
+ exports.deepMerge = deepMerge;
102
+ /**
103
+ * Resolves token references (strings like "{path.to.token}") using a value map
104
+ */
105
+ const resolveReferences = (obj, map) => {
106
+ const resolveValue = (value) => {
107
+ if (typeof value === "string" &&
108
+ value.startsWith("{") &&
109
+ value.endsWith("}")) {
110
+ const key = value.slice(1, -1);
111
+ return map.get(key) ?? value;
112
+ }
113
+ return value;
114
+ };
115
+ const traverse = (obj, currentPath = []) => {
116
+ for (const key in obj) {
117
+ const newPath = [...currentPath, key];
118
+ if (obj[key] && typeof obj[key] === "object") {
119
+ const maybeToken = obj[key];
120
+ if ((0, exports.isToken)(maybeToken)) {
121
+ const fullPath = newPath.join(".");
122
+ map.set(fullPath, maybeToken.value);
123
+ maybeToken.value = resolveValue(maybeToken.value);
124
+ }
125
+ else {
126
+ traverse(maybeToken, newPath);
127
+ }
128
+ }
129
+ }
130
+ };
131
+ traverse(obj);
132
+ };
133
+ exports.resolveReferences = resolveReferences;
134
+ /**
135
+ * Formats token values by extracting the value property
136
+ */
137
+ const formatValues = (v) => {
138
+ return v.value;
139
+ };
140
+ exports.formatValues = formatValues;
141
+ const flattenTokens = (v, depth = 0, transformKey) => {
142
+ if (typeof v === "object") {
143
+ if ((0, exports.isToken)(v)) {
144
+ return (0, exports.formatValues)(v);
145
+ }
146
+ return (0, exports.mapEntries)(v, (k, v) => {
147
+ return [
148
+ transformKey(k, depth + 1),
149
+ (0, exports.flattenTokens)(v, depth + 1, transformKey),
150
+ ];
151
+ });
152
+ }
153
+ return v;
154
+ };
155
+ exports.flattenTokens = flattenTokens;
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ /**
3
+ * Invalid transformer for testing error cases
4
+ * This transformer does not export a transform function
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ function someOtherFunction() {
8
+ return "not a transformer";
9
+ }
10
+ exports.default = {
11
+ someOtherFunction,
12
+ };
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ /**
3
+ * Test transformer for tokens-studio CLI tests
4
+ * This transformer simply wraps the input tokens with metadata
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ function transform(input) {
8
+ return {
9
+ source: "test-transformer",
10
+ metadata: input.metadata,
11
+ tokens: input.tokenData,
12
+ processed: true,
13
+ transformedAt: new Date().toISOString(),
14
+ };
15
+ }
16
+ exports.default = {
17
+ transform,
18
+ };
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * CLI entry point for tokens-studio transformations
4
+ * Supports different transformer handlers via --handler argument
5
+ */
6
+ import { ArgumentParser } from "argparse";
7
+ export declare const configParser: (parser: ArgumentParser) => void;
8
+ export declare const run: (parser: ArgumentParser) => Promise<void>;
@@ -0,0 +1,119 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ /**
4
+ * CLI entry point for tokens-studio transformations
5
+ * Supports different transformer handlers via --handler argument
6
+ */
7
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
8
+ if (k2 === undefined) k2 = k;
9
+ var desc = Object.getOwnPropertyDescriptor(m, k);
10
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
11
+ desc = { enumerable: true, get: function() { return m[k]; } };
12
+ }
13
+ Object.defineProperty(o, k2, desc);
14
+ }) : (function(o, m, k, k2) {
15
+ if (k2 === undefined) k2 = k;
16
+ o[k2] = m[k];
17
+ }));
18
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
19
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
20
+ }) : function(o, v) {
21
+ o["default"] = v;
22
+ });
23
+ var __importStar = (this && this.__importStar) || function (mod) {
24
+ if (mod && mod.__esModule) return mod;
25
+ var result = {};
26
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
27
+ __setModuleDefault(result, mod);
28
+ return result;
29
+ };
30
+ Object.defineProperty(exports, "__esModule", { value: true });
31
+ exports.run = exports.configParser = void 0;
32
+ const fs = __importStar(require("fs"));
33
+ const path = __importStar(require("path"));
34
+ const config_1 = require("../config");
35
+ const utils_1 = require("./utils");
36
+ const require_1 = require("./require");
37
+ const readJsonFile = (filePath) => {
38
+ return JSON.parse(fs.readFileSync(filePath, "utf-8"));
39
+ };
40
+ const loadTokensFromDirectory = (tokensDir) => {
41
+ const metadata = readJsonFile(path.join(tokensDir, "$metadata.json"));
42
+ const mergedTokens = {};
43
+ metadata.tokenSetOrder.forEach((tokenFile) => {
44
+ const tokenFilePath = path.join(tokensDir, `${tokenFile}.json`);
45
+ const tokenData = readJsonFile(tokenFilePath);
46
+ (0, utils_1.deepMerge)(mergedTokens, tokenData);
47
+ });
48
+ return {
49
+ metadata,
50
+ tokenData: mergedTokens,
51
+ };
52
+ };
53
+ const configParser = (parser) => {
54
+ parser.add_argument("--config", {
55
+ help: "Path to TypeScript config file (default: looks for ixt.config.ts in current directory)",
56
+ });
57
+ const subparsers = parser.add_subparsers({
58
+ title: "tokens-studio commands",
59
+ dest: "subcommand",
60
+ help: "Use 'ixt tokens-studio <subcommand> --help' for more information",
61
+ });
62
+ // Transform subcommand
63
+ const transformParser = subparsers.add_parser("transform", {
64
+ help: "Transform tokens using a transformer file",
65
+ });
66
+ transformParser.add_argument("--handler", {
67
+ help: "Path to the transformer handler file (e.g., ./my-mui-transform.ts)",
68
+ });
69
+ transformParser.add_argument("--input", {
70
+ help: "Input directory containing token files",
71
+ });
72
+ transformParser.add_argument("--output", {
73
+ help: "Output file path (e.g., theme.json)",
74
+ });
75
+ };
76
+ exports.configParser = configParser;
77
+ const run = async (args) => {
78
+ switch (args.subcommand) {
79
+ case "transform":
80
+ // Load configuration
81
+ const config = await (0, config_1.loadConfig)(args.config);
82
+ // Merge CLI args with config, giving precedence to CLI args
83
+ const mergedConfig = (0, config_1.mergeConfigWithArgs)(config, {
84
+ handler: args.handler,
85
+ input: args.input,
86
+ output: args.output,
87
+ }, "tokensStudio");
88
+ // Validate required configuration
89
+ (0, config_1.validateRequiredConfig)(mergedConfig, ["handler", "output"]);
90
+ // Resolve handler path
91
+ const handlerPath = path.resolve(mergedConfig.handler);
92
+ if (!fs.existsSync(handlerPath)) {
93
+ throw new Error(`Handler file not found: ${handlerPath}`);
94
+ }
95
+ // Load the transformer module
96
+ console.log("Requiring handler:", handlerPath);
97
+ const transformerModule = await (0, require_1.ourRequire)(handlerPath);
98
+ if (!transformerModule.transform ||
99
+ typeof transformerModule.transform !== "function") {
100
+ throw new Error(`Handler file must export a 'transform' function: ${handlerPath}`);
101
+ }
102
+ // Load tokens from input directory
103
+ const inputDir = path.resolve(mergedConfig.input || "./tokens");
104
+ if (!fs.existsSync(inputDir)) {
105
+ throw new Error(`Input directory not found: ${inputDir}`);
106
+ }
107
+ const transformInput = loadTokensFromDirectory(inputDir);
108
+ // Apply transformation
109
+ const result = transformerModule.transform(transformInput);
110
+ // Write output
111
+ const outputPath = path.resolve(mergedConfig.output);
112
+ fs.writeFileSync(outputPath, JSON.stringify(result, null, 2));
113
+ console.log(`✅ Transformation complete! Output written to: ${outputPath}`);
114
+ break;
115
+ default:
116
+ throw new Error(`Unknown subcommand: ${args.subcommand}`);
117
+ }
118
+ };
119
+ exports.run = run;
@@ -0,0 +1,150 @@
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 (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ const vitest_1 = require("vitest");
27
+ const fs = __importStar(require("fs"));
28
+ const path = __importStar(require("path"));
29
+ const argparse_1 = require("argparse");
30
+ const cli_1 = require("./cli");
31
+ const config = __importStar(require("../config"));
32
+ const require_1 = require("./require");
33
+ const testTransformer = __importStar(require("./__tests__/fixtures/test-transformer"));
34
+ // Mock dependencies
35
+ vitest_1.vi.mock("fs");
36
+ vitest_1.vi.mock("../config");
37
+ vitest_1.vi.mock("./utils", () => ({
38
+ deepMerge: vitest_1.vi.fn((target, source) => {
39
+ Object.assign(target, source);
40
+ }),
41
+ }));
42
+ vitest_1.vi.mock("./require", () => ({
43
+ ourRequire: vitest_1.vi.fn(),
44
+ }));
45
+ (0, vitest_1.describe)("tokens-studio CLI", () => {
46
+ const mockedFs = vitest_1.vi.mocked(fs);
47
+ const mockedConfig = vitest_1.vi.mocked(config);
48
+ // Test fixtures paths
49
+ const fixturesDir = path.join(__dirname, "__tests__", "fixtures");
50
+ const testTransformerPath = path.join(fixturesDir, "test-transformer.ts");
51
+ const tokensDir = path.join(fixturesDir, "tokens");
52
+ (0, vitest_1.beforeEach)(() => {
53
+ vitest_1.vi.clearAllMocks();
54
+ // Reset console.log spy
55
+ vitest_1.vi.spyOn(console, "log").mockImplementation(() => { });
56
+ // Mock fs.readFileSync to read actual fixture files
57
+ const originalReadFileSync = require("fs").readFileSync;
58
+ mockedFs.readFileSync.mockImplementation((filePath, encoding) => {
59
+ // Use real fs to read fixture files
60
+ return originalReadFileSync(filePath, encoding);
61
+ });
62
+ // Mock fs.writeFileSync
63
+ mockedFs.writeFileSync.mockImplementation(() => { });
64
+ // Mock default config functions
65
+ mockedConfig.loadConfig.mockResolvedValue({
66
+ tokensStudio: {
67
+ input: "./tokens",
68
+ },
69
+ });
70
+ mockedConfig.mergeConfigWithArgs.mockReturnValue({
71
+ input: tokensDir,
72
+ handler: testTransformerPath,
73
+ output: "./output.json",
74
+ });
75
+ mockedConfig.validateRequiredConfig.mockImplementation(() => { });
76
+ });
77
+ (0, vitest_1.afterEach)(() => {
78
+ vitest_1.vi.restoreAllMocks();
79
+ // Restore original require if it was mocked
80
+ if (global.require !== require) {
81
+ global.require = require;
82
+ }
83
+ });
84
+ (0, vitest_1.describe)("configParser", () => {
85
+ (0, vitest_1.it)("should configure argument parser with correct subcommands and options", () => {
86
+ const parser = new argparse_1.ArgumentParser({ description: "Test parser" });
87
+ const addArgumentSpy = vitest_1.vi.spyOn(parser, "add_argument");
88
+ const addSubparsersSpy = vitest_1.vi.spyOn(parser, "add_subparsers");
89
+ (0, cli_1.configParser)(parser);
90
+ // Check that config argument is added
91
+ (0, vitest_1.expect)(addArgumentSpy).toHaveBeenCalledWith("--config", {
92
+ help: "Path to TypeScript config file (default: looks for ixt.config.ts in current directory)",
93
+ });
94
+ // Check that subparsers are added
95
+ (0, vitest_1.expect)(addSubparsersSpy).toHaveBeenCalledWith({
96
+ title: "tokens-studio commands",
97
+ dest: "subcommand",
98
+ help: "Use 'ixt tokens-studio <subcommand> --help' for more information",
99
+ });
100
+ });
101
+ });
102
+ (0, vitest_1.describe)("run function", () => {
103
+ (0, vitest_1.describe)("transform subcommand", () => {
104
+ (0, vitest_1.it)("should call transformer with correct token data structure", async () => {
105
+ mockedFs.existsSync.mockReturnValue(true);
106
+ const mockTransform = vitest_1.vi.fn().mockReturnValue({ transformed: true });
107
+ // Setup require to return mocked transformer based on actual fixture
108
+ vitest_1.vi.mocked(require_1.ourRequire).mockImplementation(async (id) => {
109
+ if (id === testTransformerPath) {
110
+ return { transform: mockTransform };
111
+ }
112
+ return testTransformer.default;
113
+ });
114
+ const args = {
115
+ subcommand: "transform",
116
+ handler: testTransformerPath,
117
+ input: tokensDir,
118
+ output: "./output.json",
119
+ };
120
+ await (0, cli_1.run)(args);
121
+ // Verify transformer was called with correct structure
122
+ (0, vitest_1.expect)(mockTransform).toHaveBeenCalledWith({
123
+ metadata: { tokenSetOrder: ["base", "semantic"] },
124
+ tokenData: vitest_1.expect.objectContaining({
125
+ colors: vitest_1.expect.objectContaining({}),
126
+ spacing: vitest_1.expect.objectContaining({
127
+ xs: { value: "4px", type: "spacing" },
128
+ }),
129
+ components: vitest_1.expect.objectContaining({
130
+ button: {
131
+ padding: { value: "{spacing.sm}", type: "spacing" },
132
+ },
133
+ }),
134
+ }),
135
+ });
136
+ });
137
+ (0, vitest_1.it)("should handle config validation errors", async () => {
138
+ mockedConfig.validateRequiredConfig.mockImplementation(() => {
139
+ throw new Error("Missing required configuration: handler");
140
+ });
141
+ const args = {
142
+ subcommand: "transform",
143
+ input: tokensDir,
144
+ output: "./output.json",
145
+ };
146
+ await (0, vitest_1.expect)((0, cli_1.run)(args)).rejects.toThrow("Missing required configuration: handler");
147
+ });
148
+ });
149
+ });
150
+ });
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Tokens Studio module for @interactivethings/scripts
3
+ *
4
+ * This module provides utilities and transformers for working with
5
+ * tokens exported from Tokens Studio (Figma plugin).
6
+ */
7
+ export { simplifyValues, kebabCase, mapEntries, maybeParseToNumber, maybeParseToPx, isToken, deepMerge, resolveReferences, formatValues, flattenTokens, } from "./utils";
8
+ export interface TransformInput {
9
+ metadata: {
10
+ tokenSetOrder: string[];
11
+ };
12
+ tokenData: any;
13
+ }
14
+ export * as cli from "./cli";
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ /**
3
+ * Tokens Studio module for @interactivethings/scripts
4
+ *
5
+ * This module provides utilities and transformers for working with
6
+ * tokens exported from Tokens Studio (Figma plugin).
7
+ */
8
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
9
+ if (k2 === undefined) k2 = k;
10
+ var desc = Object.getOwnPropertyDescriptor(m, k);
11
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
12
+ desc = { enumerable: true, get: function() { return m[k]; } };
13
+ }
14
+ Object.defineProperty(o, k2, desc);
15
+ }) : (function(o, m, k, k2) {
16
+ if (k2 === undefined) k2 = k;
17
+ o[k2] = m[k];
18
+ }));
19
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
20
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
21
+ }) : function(o, v) {
22
+ o["default"] = v;
23
+ });
24
+ var __importStar = (this && this.__importStar) || function (mod) {
25
+ if (mod && mod.__esModule) return mod;
26
+ var result = {};
27
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
28
+ __setModuleDefault(result, mod);
29
+ return result;
30
+ };
31
+ Object.defineProperty(exports, "__esModule", { value: true });
32
+ exports.cli = exports.flattenTokens = exports.formatValues = exports.resolveReferences = exports.deepMerge = exports.isToken = exports.maybeParseToPx = exports.maybeParseToNumber = exports.mapEntries = exports.kebabCase = exports.simplifyValues = void 0;
33
+ // Export all utility functions
34
+ var utils_1 = require("./utils");
35
+ Object.defineProperty(exports, "simplifyValues", { enumerable: true, get: function () { return utils_1.simplifyValues; } });
36
+ Object.defineProperty(exports, "kebabCase", { enumerable: true, get: function () { return utils_1.kebabCase; } });
37
+ Object.defineProperty(exports, "mapEntries", { enumerable: true, get: function () { return utils_1.mapEntries; } });
38
+ Object.defineProperty(exports, "maybeParseToNumber", { enumerable: true, get: function () { return utils_1.maybeParseToNumber; } });
39
+ Object.defineProperty(exports, "maybeParseToPx", { enumerable: true, get: function () { return utils_1.maybeParseToPx; } });
40
+ Object.defineProperty(exports, "isToken", { enumerable: true, get: function () { return utils_1.isToken; } });
41
+ Object.defineProperty(exports, "deepMerge", { enumerable: true, get: function () { return utils_1.deepMerge; } });
42
+ Object.defineProperty(exports, "resolveReferences", { enumerable: true, get: function () { return utils_1.resolveReferences; } });
43
+ Object.defineProperty(exports, "formatValues", { enumerable: true, get: function () { return utils_1.formatValues; } });
44
+ Object.defineProperty(exports, "flattenTokens", { enumerable: true, get: function () { return utils_1.flattenTokens; } });
45
+ // Export the CLI module (for internal use)
46
+ exports.cli = __importStar(require("./cli"));