@tokens-studio/tokenscript-schemas 0.0.14 → 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 (152) hide show
  1. package/README.md +21 -0
  2. package/bundled/functions/adjust_chroma.json +60 -0
  3. package/bundled/functions/adjust_hue.json +60 -0
  4. package/bundled/functions/adjust_lightness.json +60 -0
  5. package/bundled/functions/adjust_to_contrast.json +67 -0
  6. package/bundled/functions/alpha_blend.json +31 -0
  7. package/bundled/functions/alpha_scale.json +27 -0
  8. package/bundled/functions/analogous.json +32 -0
  9. package/bundled/functions/apca_contrast.json +27 -0
  10. package/bundled/functions/are_similar.json +73 -0
  11. package/bundled/functions/auto_text_color.json +66 -0
  12. package/bundled/functions/best_contrast.json +28 -0
  13. package/bundled/functions/chroma.json +54 -0
  14. package/bundled/functions/clamp_chroma.json +66 -0
  15. package/bundled/functions/clamp_lightness.json +66 -0
  16. package/bundled/functions/clamp_to_gamut.json +23 -0
  17. package/bundled/functions/complement.json +24 -0
  18. package/bundled/functions/contrast_ratio.json +27 -0
  19. package/bundled/functions/cooler.json +52 -0
  20. package/bundled/functions/darken.json +28 -0
  21. package/bundled/functions/delta_e_2000.json +40 -0
  22. package/bundled/functions/delta_e_76.json +27 -0
  23. package/bundled/functions/delta_e_ok.json +27 -0
  24. package/bundled/functions/desaturate.json +28 -0
  25. package/bundled/functions/distributed.json +36 -0
  26. package/bundled/functions/diverging.json +36 -0
  27. package/bundled/functions/grayscale.json +24 -0
  28. package/bundled/functions/harmonize.json +65 -0
  29. package/bundled/functions/hue.json +54 -0
  30. package/bundled/functions/hue_difference.json +27 -0
  31. package/bundled/functions/in_gamut.json +27 -0
  32. package/bundled/functions/interpolate.json +66 -0
  33. package/bundled/functions/invert.json +1 -1
  34. package/bundled/functions/is_cool.json +23 -0
  35. package/bundled/functions/is_dark.json +27 -0
  36. package/bundled/functions/is_light.json +27 -0
  37. package/bundled/functions/is_neutral.json +65 -0
  38. package/bundled/functions/is_warm.json +23 -0
  39. package/bundled/functions/lighten.json +28 -0
  40. package/bundled/functions/lightness.json +61 -0
  41. package/bundled/functions/luminance.json +23 -0
  42. package/bundled/functions/meets_contrast.json +31 -0
  43. package/bundled/functions/mix.json +32 -0
  44. package/bundled/functions/monochromatic.json +28 -0
  45. package/bundled/functions/muted.json +59 -0
  46. package/bundled/functions/neutral_variant.json +59 -0
  47. package/bundled/functions/relative_luminance.json +61 -0
  48. package/bundled/functions/rotate_hue.json +28 -0
  49. package/bundled/functions/saturate.json +28 -0
  50. package/bundled/functions/scale_chroma.json +60 -0
  51. package/bundled/functions/scale_lightness.json +60 -0
  52. package/bundled/functions/sepia.json +59 -0
  53. package/bundled/functions/set_chroma.json +28 -0
  54. package/bundled/functions/set_hue.json +28 -0
  55. package/bundled/functions/set_lightness.json +28 -0
  56. package/bundled/functions/shade_scale.json +28 -0
  57. package/bundled/functions/split_complement.json +28 -0
  58. package/bundled/functions/steps.json +32 -0
  59. package/bundled/functions/tetradic.json +24 -0
  60. package/bundled/functions/tint_scale.json +36 -0
  61. package/bundled/functions/to_gamut.json +59 -0
  62. package/bundled/functions/triadic.json +24 -0
  63. package/bundled/functions/vibrant.json +59 -0
  64. package/bundled/functions/warmer.json +52 -0
  65. package/bundled/functions/wcag_level.json +60 -0
  66. package/bundled/functions.json +2602 -6
  67. package/bundled/registry.json +3705 -84
  68. package/bundled/types/css-color.json +151 -0
  69. package/bundled/types/hsl-color.json +66 -0
  70. package/bundled/types/hsv-color.json +57 -0
  71. package/bundled/types/hwb-color.json +66 -0
  72. package/bundled/types/lab-color.json +57 -0
  73. package/bundled/types/lch-color.json +57 -0
  74. package/bundled/types/okhsl-color.json +57 -0
  75. package/bundled/types/okhsv-color.json +57 -0
  76. package/bundled/types/oklab-color.json +87 -0
  77. package/bundled/types/oklch-color.json +57 -0
  78. package/bundled/types/p3-color.json +57 -0
  79. package/bundled/types/p3-linear-color.json +57 -0
  80. package/bundled/types/rgb-color.json +12 -3
  81. package/bundled/types/srgb-color.json +77 -0
  82. package/bundled/types/srgb-linear-color.json +67 -0
  83. package/bundled/types/xyz-d50-color.json +57 -0
  84. package/bundled/types/xyz-d65-color.json +77 -0
  85. package/bundled/types.json +1067 -43
  86. package/dist/cli/index.cjs +213 -22
  87. package/dist/cli/index.cjs.map +1 -1
  88. package/dist/cli/index.js +213 -22
  89. package/dist/cli/index.js.map +1 -1
  90. package/dist/index.cjs +5 -2
  91. package/dist/index.cjs.map +1 -1
  92. package/dist/index.d.cts +4 -1
  93. package/dist/index.d.ts +4 -1
  94. package/dist/index.js +5 -2
  95. package/dist/index.js.map +1 -1
  96. package/package.json +4 -2
  97. package/src/bundler/index.ts +7 -0
  98. package/src/bundler/presets/css.ts +21 -0
  99. package/src/bundler/presets/index.ts +47 -0
  100. package/src/bundler/presets/types.ts +10 -0
  101. package/src/bundler/selective-bundler.ts +9 -0
  102. package/src/bundler/types.ts +1 -0
  103. package/src/cli/commands/bundle.test.ts +34 -0
  104. package/src/cli/commands/bundle.ts +37 -11
  105. package/src/cli/commands/presets.ts +81 -0
  106. package/src/cli/index.ts +11 -0
  107. package/src/cli/output-generator.ts +8 -2
  108. package/src/cli/version-info.ts +93 -0
  109. package/src/schemas/types/css-color/from-hsl-color.tokenscript +17 -4
  110. package/src/schemas/types/css-color/from-hwb-color.tokenscript +17 -4
  111. package/src/schemas/types/css-color/from-lab-color.tokenscript +17 -4
  112. package/src/schemas/types/css-color/from-lch-color.tokenscript +17 -4
  113. package/src/schemas/types/css-color/from-oklab-color.tokenscript +17 -4
  114. package/src/schemas/types/css-color/from-oklch-color.tokenscript +17 -4
  115. package/src/schemas/types/css-color/from-p3-color.tokenscript +17 -4
  116. package/src/schemas/types/css-color/from-rgb-color.tokenscript +17 -4
  117. package/src/schemas/types/css-color/from-srgb-color.tokenscript +17 -4
  118. package/src/schemas/types/css-color/from-xyz-d50-color.tokenscript +17 -4
  119. package/src/schemas/types/css-color/from-xyz-d65-color.tokenscript +17 -4
  120. package/src/schemas/types/css-color/unit.test.ts +216 -0
  121. package/src/schemas/types/hex-color/unit.test.ts +18 -0
  122. package/src/schemas/types/hsl-color/hsla-initializer.tokenscript +17 -0
  123. package/src/schemas/types/hsl-color/initializer.tokenscript +6 -1
  124. package/src/schemas/types/hsl-color/schema.json +9 -0
  125. package/src/schemas/types/hsl-color/unit.test.ts +95 -1
  126. package/src/schemas/types/hsv-color/initializer.tokenscript +6 -1
  127. package/src/schemas/types/hsv-color/unit.test.ts +44 -0
  128. package/src/schemas/types/hwb-color/hwba-initializer.tokenscript +17 -0
  129. package/src/schemas/types/hwb-color/initializer.tokenscript +6 -1
  130. package/src/schemas/types/hwb-color/schema.json +9 -0
  131. package/src/schemas/types/hwb-color/unit.test.ts +70 -0
  132. package/src/schemas/types/lab-color/initializer.tokenscript +6 -1
  133. package/src/schemas/types/lab-color/unit.test.ts +44 -0
  134. package/src/schemas/types/lch-color/initializer.tokenscript +6 -1
  135. package/src/schemas/types/lch-color/unit.test.ts +44 -0
  136. package/src/schemas/types/okhsl-color/initializer.tokenscript +8 -1
  137. package/src/schemas/types/okhsl-color/unit.test.ts +37 -0
  138. package/src/schemas/types/okhsv-color/initializer.tokenscript +8 -1
  139. package/src/schemas/types/okhsv-color/unit.test.ts +37 -0
  140. package/src/schemas/types/oklab-color/initializer.tokenscript +6 -1
  141. package/src/schemas/types/oklab-color/unit.test.ts +58 -0
  142. package/src/schemas/types/oklch-color/initializer.tokenscript +6 -1
  143. package/src/schemas/types/oklch-color/unit.test.ts +58 -0
  144. package/src/schemas/types/p3-color/initializer.tokenscript +6 -1
  145. package/src/schemas/types/p3-color/unit.test.ts +47 -0
  146. package/src/schemas/types/rgb-color/initializer.tokenscript +7 -1
  147. package/src/schemas/types/rgb-color/rgba-initializer.tokenscript +17 -0
  148. package/src/schemas/types/rgb-color/schema.json +9 -0
  149. package/src/schemas/types/rgb-color/unit.test.ts +110 -1
  150. package/src/schemas/types/srgb-color/initializer.tokenscript +6 -1
  151. package/src/schemas/types/srgb-color/unit.test.ts +89 -0
  152. package/bundled/types/rgba-color.json +0 -89
package/dist/cli/index.js CHANGED
@@ -4,6 +4,8 @@ import ulog from 'ulog';
4
4
  import { mkdir, writeFile, readFile, readdir, access } from 'fs/promises';
5
5
  import { dirname, join } from 'path';
6
6
  import { fileURLToPath } from 'url';
7
+ import { execSync } from 'child_process';
8
+ import { readFileSync } from 'fs';
7
9
 
8
10
  var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
9
11
  get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
@@ -11,6 +13,49 @@ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require
11
13
  if (typeof require !== "undefined") return require.apply(this, arguments);
12
14
  throw Error('Dynamic require of "' + x + '" is not supported');
13
15
  });
16
+
17
+ // src/bundler/presets/css.ts
18
+ var css = {
19
+ name: "CSS",
20
+ description: "CSS color types",
21
+ types: [
22
+ "hex-color",
23
+ "rgb-color",
24
+ "hsl-color",
25
+ "oklch-color",
26
+ "oklab-color",
27
+ // Converting colors to css strings
28
+ "css-color"
29
+ ],
30
+ functions: ["lighten", "darken", "saturate", "desaturate", "mix", "invert"]
31
+ };
32
+
33
+ // src/bundler/presets/index.ts
34
+ var BUNDLE_PRESETS = {
35
+ css
36
+ };
37
+ function expandPresetSchemas(schemas) {
38
+ const expanded = [];
39
+ for (const schema of schemas) {
40
+ if (schema.startsWith("preset:")) {
41
+ const presetName = schema.slice(7);
42
+ const preset = BUNDLE_PRESETS[presetName];
43
+ if (preset) {
44
+ for (const type of preset.types) {
45
+ expanded.push(type === "*" ? "*" : `type:${type}`);
46
+ }
47
+ for (const func of preset.functions) {
48
+ expanded.push(func === "*" ? "*" : `function:${func}`);
49
+ }
50
+ } else {
51
+ console.warn(`\u26A0 Unknown preset: ${presetName}`);
52
+ }
53
+ } else {
54
+ expanded.push(schema);
55
+ }
56
+ }
57
+ return expanded;
58
+ }
14
59
  async function bundleSchemaFromDirectory(schemaDir, options) {
15
60
  const schemaJsonPath = join(schemaDir, "schema.json");
16
61
  const schemaContent = await readFile(schemaJsonPath, "utf-8");
@@ -385,12 +430,15 @@ async function bundleSelectiveSchemas(options) {
385
430
  });
386
431
  }
387
432
  }
433
+ const baseCommand = "npx @tokens-studio/tokenscript-schemas bundle";
434
+ const generatedBy = options.cliArgs?.length ? `${baseCommand} ${options.cliArgs.join(" ")}` : void 0;
388
435
  return {
389
436
  schemas: bundledSchemas,
390
437
  metadata: {
391
438
  requestedSchemas: options.schemas,
392
439
  resolvedDependencies: allSchemas,
393
- generatedAt: (/* @__PURE__ */ new Date()).toISOString()
440
+ generatedAt: (/* @__PURE__ */ new Date()).toISOString(),
441
+ generatedBy
394
442
  },
395
443
  dependencyTree
396
444
  };
@@ -416,16 +464,78 @@ function validateBundleConfig(data) {
416
464
  output: config.output
417
465
  };
418
466
  }
467
+ var __filename$1 = fileURLToPath(import.meta.url);
468
+ var __dirname$1 = dirname(__filename$1);
469
+ function getGitSha() {
470
+ try {
471
+ return execSync("git rev-parse --short HEAD", {
472
+ encoding: "utf-8",
473
+ stdio: ["pipe", "pipe", "ignore"]
474
+ }).trim();
475
+ } catch {
476
+ return null;
477
+ }
478
+ }
479
+ function isGitRepo() {
480
+ try {
481
+ execSync("git rev-parse --git-dir", {
482
+ stdio: ["pipe", "pipe", "ignore"]
483
+ });
484
+ return true;
485
+ } catch {
486
+ return false;
487
+ }
488
+ }
489
+ function getPackageVersion() {
490
+ try {
491
+ const paths = [
492
+ join(__dirname$1, "../../package.json"),
493
+ // From src/cli
494
+ join(__dirname$1, "../../../package.json")
495
+ // From dist/cli
496
+ ];
497
+ for (const path of paths) {
498
+ try {
499
+ const pkg = JSON.parse(readFileSync(path, "utf-8"));
500
+ return pkg.version || "unknown";
501
+ } catch {
502
+ }
503
+ }
504
+ return "unknown";
505
+ } catch {
506
+ return "unknown";
507
+ }
508
+ }
509
+ function getVersionInfo() {
510
+ const githubUrl = "https://github.com/tokens-studio/tokenscript-schemas";
511
+ const isLocal = isGitRepo();
512
+ let version;
513
+ if (isLocal) {
514
+ const sha = getGitSha();
515
+ version = sha ? `local-${sha}` : "local";
516
+ } else {
517
+ version = getPackageVersion();
518
+ }
519
+ return {
520
+ version,
521
+ githubUrl,
522
+ isLocal
523
+ };
524
+ }
419
525
 
420
526
  // src/cli/output-generator.ts
421
527
  function generateOutput(options) {
422
528
  const { schemas, includeHelper = true } = options;
423
529
  const timestamp = (/* @__PURE__ */ new Date()).toISOString();
424
- const schemaList = schemas.map((s) => s.uri).join(", ");
530
+ const versionInfo = getVersionInfo();
425
531
  const lines = [];
426
532
  lines.push("// Auto-generated by @tokens-studio/tokenscript-schemas");
533
+ lines.push(`// Version: ${versionInfo.version}`);
534
+ lines.push(`// GitHub: ${versionInfo.githubUrl}`);
535
+ if (options.generatedBy) {
536
+ lines.push(`// Command: ${options.generatedBy}`);
537
+ }
427
538
  lines.push(`// Generated: ${timestamp}`);
428
- lines.push(`// Schemas: ${schemaList}`);
429
539
  lines.push("");
430
540
  lines.push('import { Config } from "@tokens-studio/tokenscript-interpreter";');
431
541
  lines.push("");
@@ -512,36 +622,38 @@ function formatDryRunOutput(schemas, resolvedDependencies) {
512
622
  return lines.join("\n");
513
623
  }
514
624
  function findSchemasDir() {
515
- const __filename = fileURLToPath(import.meta.url);
516
- const __dirname = dirname(__filename);
517
- const fromDist = join(__dirname, "../../src/schemas");
518
- const fromSource = join(__dirname, "../../schemas");
625
+ const __filename2 = fileURLToPath(import.meta.url);
626
+ const __dirname2 = dirname(__filename2);
627
+ const fromSource = join(__dirname2, "../../schemas");
628
+ const fromDist = join(__dirname2, "../../../src/schemas");
519
629
  try {
520
630
  const fs = __require("fs");
521
- if (fs.existsSync(fromDist)) {
522
- return fromDist;
523
- }
524
631
  if (fs.existsSync(fromSource)) {
525
632
  return fromSource;
526
633
  }
634
+ if (fs.existsSync(fromDist)) {
635
+ return fromDist;
636
+ }
527
637
  } catch {
528
638
  }
529
- return fromDist;
639
+ return fromSource;
530
640
  }
531
- async function bundleSchemas(schemas, schemasDir) {
641
+ async function bundleSchemas(schemas, schemasDir, cliArgs) {
532
642
  const resolvedSchemasDir = findSchemasDir();
533
643
  log2.info("Bundling schemas:", schemas);
534
644
  log2.debug("Schemas directory:", resolvedSchemasDir);
535
645
  const result = await bundleSelectiveSchemas({
536
646
  schemas,
537
- schemasDir: resolvedSchemasDir
647
+ schemasDir: resolvedSchemasDir,
648
+ cliArgs
538
649
  });
539
650
  log2.info(
540
651
  `Resolved ${result.metadata.resolvedDependencies.length} schemas (including dependencies)`
541
652
  );
542
653
  const output = generateOutput({
543
654
  schemas: result.schemas,
544
- includeHelper: true
655
+ includeHelper: true,
656
+ generatedBy: result.metadata.generatedBy
545
657
  });
546
658
  return {
547
659
  output,
@@ -564,7 +676,25 @@ async function handleBundleCommand(schemas, options = {}) {
564
676
  if (!configSchemas || configSchemas.length === 0) {
565
677
  throw new Error("No schemas specified. Provide schemas as arguments or via --config");
566
678
  }
567
- const { output, metadata, dependencyTree } = await bundleSchemas(configSchemas);
679
+ configSchemas = expandPresetSchemas(configSchemas);
680
+ const cliArgs = [];
681
+ if (schemas.length > 0) {
682
+ cliArgs.push(...schemas);
683
+ }
684
+ if (options.config) {
685
+ cliArgs.push("--config", options.config);
686
+ }
687
+ if (options.output) {
688
+ cliArgs.push("--output", options.output);
689
+ }
690
+ if (options.dryRun) {
691
+ cliArgs.push("--dry-run");
692
+ }
693
+ const { output, metadata, dependencyTree } = await bundleSchemas(
694
+ configSchemas,
695
+ void 0,
696
+ cliArgs
697
+ );
568
698
  console.log("");
569
699
  console.log(formatDependencyTree(dependencyTree, metadata.requestedSchemas));
570
700
  console.log("");
@@ -585,10 +715,10 @@ async function handleBundleCommand(schemas, options = {}) {
585
715
  }
586
716
  var log3 = ulog("list");
587
717
  function findSchemasDir2() {
588
- const __filename = fileURLToPath(import.meta.url);
589
- const __dirname = dirname(__filename);
590
- const fromDist = join(__dirname, "../../src/schemas");
591
- const fromSource = join(__dirname, "../../schemas");
718
+ const __filename2 = fileURLToPath(import.meta.url);
719
+ const __dirname2 = dirname(__filename2);
720
+ const fromDist = join(__dirname2, "../../src/schemas");
721
+ const fromSource = join(__dirname2, "../../schemas");
592
722
  try {
593
723
  const fs = __require("fs");
594
724
  if (fs.existsSync(fromDist)) {
@@ -658,15 +788,68 @@ async function handleListCommand(options = {}) {
658
788
  const output = formatListOutput(result, options);
659
789
  console.log(output);
660
790
  }
791
+ var log4 = ulog("presets");
792
+ function formatPresetInfo() {
793
+ const lines = [];
794
+ lines.push("=".repeat(60));
795
+ lines.push("Available Bundle Presets");
796
+ lines.push("=".repeat(60));
797
+ for (const [key, preset] of Object.entries(BUNDLE_PRESETS)) {
798
+ lines.push("");
799
+ lines.push(`preset:${key}`);
800
+ lines.push(` ${preset.description}`);
801
+ const typesCount = preset.types.length === 1 && preset.types[0] === "*" ? "all" : preset.types.length;
802
+ lines.push("");
803
+ lines.push(` Types (${typesCount}):`);
804
+ if (preset.types.length > 0 && preset.types[0] !== "*") {
805
+ for (const type of preset.types) {
806
+ lines.push(` - ${type}`);
807
+ }
808
+ } else {
809
+ lines.push(` - all`);
810
+ }
811
+ const functionsCount = preset.functions.length === 1 && preset.functions[0] === "*" ? "all" : preset.functions.length;
812
+ lines.push("");
813
+ lines.push(` Functions (${functionsCount}):`);
814
+ if (preset.functions.length > 0 && preset.functions[0] !== "*") {
815
+ for (const func of preset.functions) {
816
+ lines.push(` - ${func}`);
817
+ }
818
+ } else {
819
+ lines.push(` - all`);
820
+ }
821
+ }
822
+ lines.push("");
823
+ lines.push("=".repeat(60));
824
+ lines.push("Usage Examples:");
825
+ lines.push("=".repeat(60));
826
+ lines.push("npx tokenscript-schemas bundle preset:css");
827
+ lines.push("npx tokenscript-schemas bundle preset:css type:oklab-color");
828
+ lines.push("npx tokenscript-schemas bundle type:hex-color function:lighten");
829
+ lines.push("");
830
+ lines.push("Note: You can combine multiple presets and specific schemas!");
831
+ return lines.join("\n");
832
+ }
833
+ async function handlePresetsCommand() {
834
+ try {
835
+ log4.info("Listing available presets");
836
+ const output = formatPresetInfo();
837
+ console.log(output);
838
+ log4.info(`Listed ${Object.keys(BUNDLE_PRESETS).length} presets`);
839
+ } catch (error) {
840
+ log4.error("Failed to list presets:", error);
841
+ throw error;
842
+ }
843
+ }
661
844
 
662
845
  // src/cli/index.ts
663
- var log4 = ulog("cli");
846
+ var log5 = ulog("cli");
664
847
  var cli = cac("tokenscript-schemas");
665
848
  cli.command("bundle [...schemas]", "Bundle schemas into a JS file").option("-c, --config <path>", "Path to config file").option("-o, --output <path>", "Output file path", { default: "./tokenscript-schemas.js" }).option("-d, --dry-run", "Preview what would be bundled without writing").action(async (schemas, options) => {
666
849
  try {
667
850
  await handleBundleCommand(schemas, options);
668
851
  } catch (error) {
669
- log4.error("Error:", error);
852
+ log5.error("Error:", error);
670
853
  process.exit(1);
671
854
  }
672
855
  });
@@ -674,7 +857,15 @@ cli.command("list", "List available schemas").option("--types", "List only type
674
857
  try {
675
858
  await handleListCommand(options);
676
859
  } catch (error) {
677
- log4.error("Error:", error);
860
+ log5.error("Error:", error);
861
+ process.exit(1);
862
+ }
863
+ });
864
+ cli.command("presets", "List available bundle presets").action(async () => {
865
+ try {
866
+ await handlePresetsCommand();
867
+ } catch (error) {
868
+ log5.error("Error:", error);
678
869
  process.exit(1);
679
870
  }
680
871
  });