@knapsack/design-tokens-cli 4.103.0--canary.8158.6e59694.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.
- package/README.md +48 -0
- package/dist/build.d.ts +5 -0
- package/dist/build.d.ts.map +1 -0
- package/dist/build.js +38 -0
- package/dist/build.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +8 -0
- package/dist/cli.js.map +1 -0
- package/dist/errors.d.ts +5 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +9 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -0
- package/dist/resolve-config.d.ts +19 -0
- package/dist/resolve-config.d.ts.map +1 -0
- package/dist/resolve-config.js +131 -0
- package/dist/resolve-config.js.map +1 -0
- package/dist/run-cli.d.ts +8 -0
- package/dist/run-cli.d.ts.map +1 -0
- package/dist/run-cli.js +66 -0
- package/dist/run-cli.js.map +1 -0
- package/dist/schema.d.ts +25 -0
- package/dist/schema.d.ts.map +1 -0
- package/dist/schema.js +28 -0
- package/dist/schema.js.map +1 -0
- package/dist/telemetry.d.ts +6 -0
- package/dist/telemetry.d.ts.map +1 -0
- package/dist/telemetry.js +43 -0
- package/dist/telemetry.js.map +1 -0
- package/dist/types.d.ts +13 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +63 -0
package/README.md
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# @knapsack/design-tokens-cli
|
|
2
|
+
|
|
3
|
+
Standalone, publishable CLI for the design-token **build** step: read a tokens JSON source, convert it, and write per-target files. It does not require the full `knapsack` CLI.
|
|
4
|
+
|
|
5
|
+
Output files are produced with the same converter (`convertTokenDataToFiles`) and writer (`writeFormattedFile`) as `knapsack` design-tokens `build`, so results match for the same input.
|
|
6
|
+
|
|
7
|
+
## Install
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
pnpm add -D @knapsack/design-tokens-cli
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## Config
|
|
14
|
+
|
|
15
|
+
Default filenames (in the working directory): `design-tokens-cli.config.mjs` or `design-tokens-cli.config.ts`. Override with `--config ./path`.
|
|
16
|
+
|
|
17
|
+
```ts
|
|
18
|
+
import { configure } from '@knapsack/design-tokens-cli';
|
|
19
|
+
|
|
20
|
+
export default configure({
|
|
21
|
+
srcFilePath: './src/knapsack.design-tokens.json',
|
|
22
|
+
distDir: './dist/tokens',
|
|
23
|
+
// Omit `targets` to generate every target. Set `enabled: false` per target to skip.
|
|
24
|
+
targets: {
|
|
25
|
+
css: { enabled: true },
|
|
26
|
+
js: { enabled: true },
|
|
27
|
+
android: { enabled: false },
|
|
28
|
+
ios: { enabled: false },
|
|
29
|
+
},
|
|
30
|
+
});
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
The config shape matches `KnapsackConfig['designTokens']` (`srcFilePath`, `distDir`, `targets`).
|
|
34
|
+
|
|
35
|
+
## Commands
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
design-tokens-cli build
|
|
39
|
+
design-tokens-cli build --config ./design-tokens-cli.config.mjs
|
|
40
|
+
design-tokens-cli build --src-file-path ./tokens.json --dist-dir ./dist
|
|
41
|
+
design-tokens-cli build --targets css,js
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
CLI flags override the same option in the config file.
|
|
45
|
+
|
|
46
|
+
## Telemetry
|
|
47
|
+
|
|
48
|
+
Errors always print to stderr. A public Datadog client token sends best-effort telemetry in addition to that local log. Set `KS_DISABLE_TELEMETRY=true` to skip Datadog.
|
package/dist/build.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../src/build.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,qBAAqB,CAAC;AAEzE,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,6BAA6B,GACpC,OAAO,CAAC;IAAE,QAAQ,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,CAAC,CAqCvD"}
|
package/dist/build.js
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { join, parse } from 'node:path';
|
|
2
|
+
import { convertTokenDataToFiles, } from '@knapsack/design-token-utils';
|
|
3
|
+
import { existsSync, readJSON, writeFormattedFile } from '@knapsack/file-utils';
|
|
4
|
+
import { DesignTokensCliError } from './errors.js';
|
|
5
|
+
export async function buildDesignTokens(config) {
|
|
6
|
+
if (!existsSync(config.srcFilePath)) {
|
|
7
|
+
throw new DesignTokensCliError(`The configured srcFilePath does not exist: ${config.srcFilePath}`);
|
|
8
|
+
}
|
|
9
|
+
const tokensSrc = await readJSON(config.srcFilePath);
|
|
10
|
+
let tokenFiles;
|
|
11
|
+
try {
|
|
12
|
+
const args = {
|
|
13
|
+
tokensSrc,
|
|
14
|
+
targets: config.targets,
|
|
15
|
+
};
|
|
16
|
+
tokenFiles = convertTokenDataToFiles(args);
|
|
17
|
+
}
|
|
18
|
+
catch (error) {
|
|
19
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
20
|
+
throw new DesignTokensCliError(`Failed to convert tokens: ${message}`);
|
|
21
|
+
}
|
|
22
|
+
const files = tokenFiles.map(({ path, contents }) => {
|
|
23
|
+
const { base } = parse(path);
|
|
24
|
+
return {
|
|
25
|
+
path: join(config.distDir, base),
|
|
26
|
+
contents,
|
|
27
|
+
};
|
|
28
|
+
});
|
|
29
|
+
try {
|
|
30
|
+
await Promise.all(files.map(writeFormattedFile));
|
|
31
|
+
}
|
|
32
|
+
catch (error) {
|
|
33
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
34
|
+
throw new DesignTokensCliError(`Failed to save files locally: ${message}`);
|
|
35
|
+
}
|
|
36
|
+
return { writtenPaths: files.map((file) => file.path) };
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=build.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build.js","sourceRoot":"","sources":["../src/build.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EACL,uBAAuB,GAExB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAEhF,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAGnD,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,MAAqC;IAErC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC;QACpC,MAAM,IAAI,oBAAoB,CAC5B,8CAA8C,MAAM,CAAC,WAAW,EAAE,CACnE,CAAC;IACJ,CAAC;IAED,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAgB,MAAM,CAAC,WAAW,CAAC,CAAC;IAEpE,IAAI,UAAsD,CAAC;IAC3D,IAAI,CAAC;QACH,MAAM,IAAI,GAAgC;YACxC,SAAS;YACT,OAAO,EAAE,MAAM,CAAC,OAAO;SACxB,CAAC;QACF,UAAU,GAAG,uBAAuB,CAAC,IAAI,CAAC,CAAC;IAC7C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,MAAM,IAAI,oBAAoB,CAAC,6BAA6B,OAAO,EAAE,CAAC,CAAC;IACzE,CAAC;IAED,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE;QAClD,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;QAC7B,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC;YAChC,QAAQ;SACT,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC;QACH,MAAM,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,CAAC;IACnD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,MAAM,IAAI,oBAAoB,CAAC,iCAAiC,OAAO,EAAE,CAAC,CAAC;IAC7E,CAAC;IAED,OAAO,EAAE,YAAY,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;AAC1D,CAAC"}
|
package/dist/cli.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
|
package/dist/cli.js
ADDED
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAEtC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC;IAC5B,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAC3B,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;CACnB,CAAC,CAAC;AACH,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC"}
|
package/dist/errors.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,qBAAa,oBAAqB,SAAQ,KAAK;IAC7C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;gBAEd,OAAO,EAAE,MAAM,EAAE,QAAQ,SAAI;CAK1C"}
|
package/dist/errors.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,oBAAqB,SAAQ,KAAK;IACpC,QAAQ,CAAS;IAE1B,YAAY,OAAe,EAAE,QAAQ,GAAG,CAAC;QACvC,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;QACnC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;CACF"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { DesignTokensCliConfig } from './types.js';
|
|
2
|
+
export type { DesignTokensCliConfig, TokenTargetId } from './types.js';
|
|
3
|
+
export { TOKEN_TARGET_IDS } from './types.js';
|
|
4
|
+
export { DesignTokensCliConfigSchema } from './schema.js';
|
|
5
|
+
/**
|
|
6
|
+
* Identity helper so config files can `export default configure({})` and get
|
|
7
|
+
* type completion for {@link DesignTokensCliConfig}.
|
|
8
|
+
*/
|
|
9
|
+
export declare function configure(config: DesignTokensCliConfig): DesignTokensCliConfig;
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAExD,YAAY,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AACvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,2BAA2B,EAAE,MAAM,aAAa,CAAC;AAE1D;;;GAGG;AACH,wBAAgB,SAAS,CACvB,MAAM,EAAE,qBAAqB,GAC5B,qBAAqB,CAEvB"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export { TOKEN_TARGET_IDS } from './types.js';
|
|
2
|
+
export { DesignTokensCliConfigSchema } from './schema.js';
|
|
3
|
+
/**
|
|
4
|
+
* Identity helper so config files can `export default configure({})` and get
|
|
5
|
+
* type completion for {@link DesignTokensCliConfig}.
|
|
6
|
+
*/
|
|
7
|
+
export function configure(config) {
|
|
8
|
+
return config;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,2BAA2B,EAAE,MAAM,aAAa,CAAC;AAE1D;;;GAGG;AACH,MAAM,UAAU,SAAS,CACvB,MAA6B;IAE7B,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { type DesignTokensCliConfig } from './types.js';
|
|
2
|
+
export declare const DEFAULT_CONFIG_FILENAMES: readonly ["design-tokens-cli.config.mjs", "design-tokens-cli.config.ts"];
|
|
3
|
+
export interface CliFlagOverrides {
|
|
4
|
+
readonly configPath?: string;
|
|
5
|
+
readonly srcFilePath?: string;
|
|
6
|
+
readonly distDir?: string;
|
|
7
|
+
readonly targets?: string;
|
|
8
|
+
}
|
|
9
|
+
export interface ResolvedDesignTokensCliConfig {
|
|
10
|
+
readonly srcFilePath: string;
|
|
11
|
+
readonly distDir: string;
|
|
12
|
+
readonly targets: DesignTokensCliConfig['targets'];
|
|
13
|
+
readonly configFilePath?: string;
|
|
14
|
+
}
|
|
15
|
+
export declare function resolveConfig({ cwd, flags, }: {
|
|
16
|
+
readonly cwd: string;
|
|
17
|
+
readonly flags: CliFlagOverrides;
|
|
18
|
+
}): Promise<ResolvedDesignTokensCliConfig>;
|
|
19
|
+
//# sourceMappingURL=resolve-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve-config.d.ts","sourceRoot":"","sources":["../src/resolve-config.ts"],"names":[],"mappings":"AAMA,OAAO,EAEL,KAAK,qBAAqB,EAE3B,MAAM,YAAY,CAAC;AAEpB,eAAO,MAAM,wBAAwB,0EAG3B,CAAC;AAEX,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,qBAAqB,CAAC,SAAS,CAAC,CAAC;IACnD,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;CAClC;AAqFD,wBAAsB,aAAa,CAAC,EAClC,GAAG,EACH,KAAK,GACN,EAAE;IACD,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,gBAAgB,CAAC;CAClC,GAAG,OAAO,CAAC,6BAA6B,CAAC,CAsEzC"}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import { dirname, isAbsolute, join } from 'node:path';
|
|
2
|
+
import { pathToFileURL } from 'node:url';
|
|
3
|
+
import { existsSync } from '@knapsack/file-utils';
|
|
4
|
+
import { z } from 'zod';
|
|
5
|
+
import { DesignTokensCliError } from './errors.js';
|
|
6
|
+
import { DesignTokensCliConfigSchema, TOKEN_TARGET_ID_SET } from './schema.js';
|
|
7
|
+
import { TOKEN_TARGET_IDS, } from './types.js';
|
|
8
|
+
export const DEFAULT_CONFIG_FILENAMES = [
|
|
9
|
+
'design-tokens-cli.config.mjs',
|
|
10
|
+
'design-tokens-cli.config.ts',
|
|
11
|
+
];
|
|
12
|
+
function resolvePathFrom(baseDir, path) {
|
|
13
|
+
return isAbsolute(path) ? path : join(baseDir, path);
|
|
14
|
+
}
|
|
15
|
+
function formatZodError(error) {
|
|
16
|
+
const details = error.issues
|
|
17
|
+
.map((issue) => {
|
|
18
|
+
const fieldPath = issue.path.length > 0 ? issue.path.join('.') : '(root)';
|
|
19
|
+
return `${fieldPath}: ${issue.message}`;
|
|
20
|
+
})
|
|
21
|
+
.join('\n');
|
|
22
|
+
return `Config failed schema validation:\n${details}\n\n${z.prettifyError(error)}`;
|
|
23
|
+
}
|
|
24
|
+
function findDefaultConfig(cwd) {
|
|
25
|
+
for (const filename of DEFAULT_CONFIG_FILENAMES) {
|
|
26
|
+
const candidate = join(cwd, filename);
|
|
27
|
+
if (existsSync(candidate)) {
|
|
28
|
+
return candidate;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
return undefined;
|
|
32
|
+
}
|
|
33
|
+
async function loadConfigModule(configFilePath) {
|
|
34
|
+
const imported = await import(pathToFileURL(configFilePath).href);
|
|
35
|
+
if (typeof imported === 'object' &&
|
|
36
|
+
imported !== null &&
|
|
37
|
+
'default' in imported) {
|
|
38
|
+
return imported.default;
|
|
39
|
+
}
|
|
40
|
+
return imported;
|
|
41
|
+
}
|
|
42
|
+
function parseTargetsFlag(value) {
|
|
43
|
+
const enabledIds = value
|
|
44
|
+
.split(',')
|
|
45
|
+
.map((part) => part.trim())
|
|
46
|
+
.filter((part) => part.length > 0);
|
|
47
|
+
if (enabledIds.length === 0) {
|
|
48
|
+
throw new DesignTokensCliError('No targets are enabled. Pass a comma-separated list such as --targets css,js,android,ios.');
|
|
49
|
+
}
|
|
50
|
+
const unknown = enabledIds.filter((id) => !TOKEN_TARGET_ID_SET.has(id));
|
|
51
|
+
if (unknown.length > 0) {
|
|
52
|
+
throw new DesignTokensCliError(`Unknown target(s): ${unknown.join(', ')}. Expected one of: ${TOKEN_TARGET_IDS.join(', ')}.`);
|
|
53
|
+
}
|
|
54
|
+
const enabled = new Set(enabledIds);
|
|
55
|
+
return {
|
|
56
|
+
css: { enabled: enabled.has('css') },
|
|
57
|
+
js: { enabled: enabled.has('js') },
|
|
58
|
+
android: { enabled: enabled.has('android') },
|
|
59
|
+
ios: { enabled: enabled.has('ios') },
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
function hasAnyEnabledTarget(targets) {
|
|
63
|
+
if (!targets) {
|
|
64
|
+
return true;
|
|
65
|
+
}
|
|
66
|
+
return TOKEN_TARGET_IDS.some((id) => targets[id]?.enabled === true);
|
|
67
|
+
}
|
|
68
|
+
function missingRequiredMessage(option) {
|
|
69
|
+
const flag = option === 'srcFilePath' ? '--src-file-path <path>' : '--dist-dir <path>';
|
|
70
|
+
return `Missing required option '${option}'. Supply it in design-tokens-cli.config.mjs (or .ts) as ${option}, or pass ${flag}. Override the config path with --config ./path.`;
|
|
71
|
+
}
|
|
72
|
+
export async function resolveConfig({ cwd, flags, }) {
|
|
73
|
+
let configFilePath;
|
|
74
|
+
if (flags.configPath) {
|
|
75
|
+
configFilePath = resolvePathFrom(cwd, flags.configPath);
|
|
76
|
+
if (!existsSync(configFilePath)) {
|
|
77
|
+
throw new DesignTokensCliError(`Config file not found: ${configFilePath}. Pass --config ./path to a design-tokens-cli.config.mjs or .ts file.`);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
configFilePath = findDefaultConfig(cwd);
|
|
82
|
+
}
|
|
83
|
+
let fileConfig = {};
|
|
84
|
+
if (configFilePath) {
|
|
85
|
+
let raw;
|
|
86
|
+
try {
|
|
87
|
+
raw = await loadConfigModule(configFilePath);
|
|
88
|
+
}
|
|
89
|
+
catch (error) {
|
|
90
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
91
|
+
throw new DesignTokensCliError(`Failed to load config file ${configFilePath}: ${message}`);
|
|
92
|
+
}
|
|
93
|
+
const parsed = DesignTokensCliConfigSchema.safeParse(raw);
|
|
94
|
+
if (!parsed.success) {
|
|
95
|
+
throw new DesignTokensCliError(formatZodError(parsed.error));
|
|
96
|
+
}
|
|
97
|
+
fileConfig = parsed.data;
|
|
98
|
+
}
|
|
99
|
+
const pathBase = configFilePath ? dirname(configFilePath) : cwd;
|
|
100
|
+
const srcFilePathFlag = flags.srcFilePath;
|
|
101
|
+
const distDirFlag = flags.distDir;
|
|
102
|
+
const srcFilePath = srcFilePathFlag
|
|
103
|
+
? resolvePathFrom(cwd, srcFilePathFlag)
|
|
104
|
+
: fileConfig.srcFilePath
|
|
105
|
+
? resolvePathFrom(pathBase, fileConfig.srcFilePath)
|
|
106
|
+
: undefined;
|
|
107
|
+
const distDir = distDirFlag
|
|
108
|
+
? resolvePathFrom(cwd, distDirFlag)
|
|
109
|
+
: fileConfig.distDir
|
|
110
|
+
? resolvePathFrom(pathBase, fileConfig.distDir)
|
|
111
|
+
: undefined;
|
|
112
|
+
if (!srcFilePath) {
|
|
113
|
+
throw new DesignTokensCliError(missingRequiredMessage('srcFilePath'));
|
|
114
|
+
}
|
|
115
|
+
if (!distDir) {
|
|
116
|
+
throw new DesignTokensCliError(missingRequiredMessage('distDir'));
|
|
117
|
+
}
|
|
118
|
+
const targets = flags.targets
|
|
119
|
+
? parseTargetsFlag(flags.targets)
|
|
120
|
+
: fileConfig.targets;
|
|
121
|
+
if (!hasAnyEnabledTarget(targets)) {
|
|
122
|
+
throw new DesignTokensCliError('No targets are enabled. Set at least one entry in `targets` to `{ enabled: true }`, omit `targets` to generate all available targets, or pass --targets css,js,android,ios.');
|
|
123
|
+
}
|
|
124
|
+
return {
|
|
125
|
+
srcFilePath,
|
|
126
|
+
distDir,
|
|
127
|
+
targets,
|
|
128
|
+
configFilePath,
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
//# sourceMappingURL=resolve-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve-config.js","sourceRoot":"","sources":["../src/resolve-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,2BAA2B,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAC/E,OAAO,EACL,gBAAgB,GAGjB,MAAM,YAAY,CAAC;AAEpB,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACtC,8BAA8B;IAC9B,6BAA6B;CACrB,CAAC;AAgBX,SAAS,eAAe,CAAC,OAAe,EAAE,IAAY;IACpD,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AACvD,CAAC;AAED,SAAS,cAAc,CAAC,KAAiB;IACvC,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM;SACzB,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QACb,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;QAC1E,OAAO,GAAG,SAAS,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC;IAC1C,CAAC,CAAC;SACD,IAAI,CAAC,IAAI,CAAC,CAAC;IACd,OAAO,qCAAqC,OAAO,OAAO,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;AACrF,CAAC;AAED,SAAS,iBAAiB,CAAC,GAAW;IACpC,KAAK,MAAM,QAAQ,IAAI,wBAAwB,EAAE,CAAC;QAChD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QACtC,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC1B,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,KAAK,UAAU,gBAAgB,CAAC,cAAsB;IACpD,MAAM,QAAQ,GAAY,MAAM,MAAM,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,CAAC;IAC3E,IACE,OAAO,QAAQ,KAAK,QAAQ;QAC5B,QAAQ,KAAK,IAAI;QACjB,SAAS,IAAI,QAAQ,EACrB,CAAC;QACD,OAAQ,QAAiC,CAAC,OAAO,CAAC;IACpD,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,gBAAgB,CACvB,KAAa;IAEb,MAAM,UAAU,GAAG,KAAK;SACrB,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;SAC1B,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAErC,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,oBAAoB,CAC5B,2FAA2F,CAC5F,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,mBAAmB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IACxE,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,oBAAoB,CAC5B,sBAAsB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,sBAAsB,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAC7F,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC;IACpC,OAAO;QACL,GAAG,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;QACpC,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;QAClC,OAAO,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE;QAC5C,GAAG,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;KACrC,CAAC;AACJ,CAAC;AAED,SAAS,mBAAmB,CAC1B,OAAyC;IAEzC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,gBAAgB,CAAC,IAAI,CAC1B,CAAC,EAAiB,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,OAAO,KAAK,IAAI,CACrD,CAAC;AACJ,CAAC;AAED,SAAS,sBAAsB,CAAC,MAAiC;IAC/D,MAAM,IAAI,GACR,MAAM,KAAK,aAAa,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,mBAAmB,CAAC;IAC5E,OAAO,4BAA4B,MAAM,4DAA4D,MAAM,aAAa,IAAI,kDAAkD,CAAC;AACjL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,EAClC,GAAG,EACH,KAAK,GAIN;IACC,IAAI,cAAkC,CAAC;IACvC,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;QACrB,cAAc,GAAG,eAAe,CAAC,GAAG,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;QACxD,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;YAChC,MAAM,IAAI,oBAAoB,CAC5B,0BAA0B,cAAc,uEAAuE,CAChH,CAAC;QACJ,CAAC;IACH,CAAC;SAAM,CAAC;QACN,cAAc,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;IAC1C,CAAC;IAED,IAAI,UAAU,GAA0B,EAAE,CAAC;IAC3C,IAAI,cAAc,EAAE,CAAC;QACnB,IAAI,GAAY,CAAC;QACjB,IAAI,CAAC;YACH,GAAG,GAAG,MAAM,gBAAgB,CAAC,cAAc,CAAC,CAAC;QAC/C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACvE,MAAM,IAAI,oBAAoB,CAC5B,8BAA8B,cAAc,KAAK,OAAO,EAAE,CAC3D,CAAC;QACJ,CAAC;QAED,MAAM,MAAM,GAAG,2BAA2B,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QAC1D,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,IAAI,oBAAoB,CAAC,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAC/D,CAAC;QACD,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC;IAC3B,CAAC;IAED,MAAM,QAAQ,GAAG,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IAChE,MAAM,eAAe,GAAG,KAAK,CAAC,WAAW,CAAC;IAC1C,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC;IAElC,MAAM,WAAW,GAAG,eAAe;QACjC,CAAC,CAAC,eAAe,CAAC,GAAG,EAAE,eAAe,CAAC;QACvC,CAAC,CAAC,UAAU,CAAC,WAAW;YACtB,CAAC,CAAC,eAAe,CAAC,QAAQ,EAAE,UAAU,CAAC,WAAW,CAAC;YACnD,CAAC,CAAC,SAAS,CAAC;IAChB,MAAM,OAAO,GAAG,WAAW;QACzB,CAAC,CAAC,eAAe,CAAC,GAAG,EAAE,WAAW,CAAC;QACnC,CAAC,CAAC,UAAU,CAAC,OAAO;YAClB,CAAC,CAAC,eAAe,CAAC,QAAQ,EAAE,UAAU,CAAC,OAAO,CAAC;YAC/C,CAAC,CAAC,SAAS,CAAC;IAEhB,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,MAAM,IAAI,oBAAoB,CAAC,sBAAsB,CAAC,aAAa,CAAC,CAAC,CAAC;IACxE,CAAC;IACD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,oBAAoB,CAAC,sBAAsB,CAAC,SAAS,CAAC,CAAC,CAAC;IACpE,CAAC;IAED,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO;QAC3B,CAAC,CAAC,gBAAgB,CAAC,KAAK,CAAC,OAAO,CAAC;QACjC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC;IAEvB,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,EAAE,CAAC;QAClC,MAAM,IAAI,oBAAoB,CAC5B,6KAA6K,CAC9K,CAAC;IACJ,CAAC;IAED,OAAO;QACL,WAAW;QACX,OAAO;QACP,OAAO;QACP,cAAc;KACf,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export interface RunCliArgs {
|
|
2
|
+
readonly argv: readonly string[];
|
|
3
|
+
readonly cwd: string;
|
|
4
|
+
readonly stdout?: NodeJS.WritableStream;
|
|
5
|
+
readonly stderr?: NodeJS.WritableStream;
|
|
6
|
+
}
|
|
7
|
+
export declare function runCli({ argv, cwd, stdout, stderr, }: RunCliArgs): Promise<number>;
|
|
8
|
+
//# sourceMappingURL=run-cli.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-cli.d.ts","sourceRoot":"","sources":["../src/run-cli.ts"],"names":[],"mappings":"AAWA,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC;IACxC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC;CACzC;AAED,wBAAsB,MAAM,CAAC,EAC3B,IAAI,EACJ,GAAG,EACH,MAAuB,EACvB,MAAuB,GACxB,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CA0F9B"}
|
package/dist/run-cli.js
ADDED
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import { findUpPkgJson } from '@knapsack/file-utils';
|
|
3
|
+
import { fileURLToPath } from 'node:url';
|
|
4
|
+
import { dirname } from 'node:path';
|
|
5
|
+
import { buildDesignTokens } from './build.js';
|
|
6
|
+
import { DesignTokensCliError } from './errors.js';
|
|
7
|
+
import { resolveConfig } from './resolve-config.js';
|
|
8
|
+
import { createCliTelemetry, logError } from './telemetry.js';
|
|
9
|
+
const { pkg } = findUpPkgJson(dirname(fileURLToPath(import.meta.url)));
|
|
10
|
+
export async function runCli({ argv, cwd, stdout = process.stdout, stderr = process.stderr, }) {
|
|
11
|
+
const telemetry = createCliTelemetry();
|
|
12
|
+
const program = new Command()
|
|
13
|
+
.name('design-tokens-cli')
|
|
14
|
+
.description('Build design tokens from a tokens JSON source into per-target files')
|
|
15
|
+
.version(pkg?.version ?? '0.0.0')
|
|
16
|
+
.enablePositionalOptions()
|
|
17
|
+
.showHelpAfterError();
|
|
18
|
+
program.exitOverride();
|
|
19
|
+
program.configureOutput({
|
|
20
|
+
writeOut: (str) => stdout.write(str),
|
|
21
|
+
writeErr: (str) => stderr.write(str),
|
|
22
|
+
});
|
|
23
|
+
program
|
|
24
|
+
.command('build', { isDefault: true })
|
|
25
|
+
.description('Read tokens JSON, convert, and write per-target output files')
|
|
26
|
+
.option('--config <path>', 'Path to design-tokens-cli.config.mjs or .ts (default: ./design-tokens-cli.config.{mjs,ts})')
|
|
27
|
+
.option('--src-file-path <path>', 'Path to the design tokens JSON source (overrides config srcFilePath)')
|
|
28
|
+
.option('--src <path>', 'Alias for --src-file-path')
|
|
29
|
+
.option('--dist-dir <path>', 'Directory to write generated files (overrides config distDir)')
|
|
30
|
+
.option('--dist <path>', 'Alias for --dist-dir')
|
|
31
|
+
.option('--targets <list>', 'Comma-separated enabled targets: css,js,android,ios (overrides config targets)')
|
|
32
|
+
.action(async (opts) => {
|
|
33
|
+
const flags = {
|
|
34
|
+
configPath: opts.config,
|
|
35
|
+
srcFilePath: opts.srcFilePath ?? opts.src,
|
|
36
|
+
distDir: opts.distDir ?? opts.dist,
|
|
37
|
+
targets: opts.targets,
|
|
38
|
+
};
|
|
39
|
+
const config = await resolveConfig({ cwd, flags });
|
|
40
|
+
const { writtenPaths } = await buildDesignTokens(config);
|
|
41
|
+
stdout.write(`Design tokens built successfully (${writtenPaths.length} files) to ${config.distDir}\n`);
|
|
42
|
+
});
|
|
43
|
+
try {
|
|
44
|
+
await program.parseAsync([...argv], { from: 'user' });
|
|
45
|
+
return 0;
|
|
46
|
+
}
|
|
47
|
+
catch (error) {
|
|
48
|
+
if (error instanceof Error &&
|
|
49
|
+
'code' in error &&
|
|
50
|
+
error.code === 'commander.helpDisplayed') {
|
|
51
|
+
return 0;
|
|
52
|
+
}
|
|
53
|
+
if (error instanceof Error &&
|
|
54
|
+
'code' in error &&
|
|
55
|
+
error.code === 'commander.version') {
|
|
56
|
+
return 0;
|
|
57
|
+
}
|
|
58
|
+
const cliError = error instanceof DesignTokensCliError
|
|
59
|
+
? error
|
|
60
|
+
: new DesignTokensCliError(error instanceof Error ? error.message : String(error));
|
|
61
|
+
logError(cliError.message, stderr);
|
|
62
|
+
await telemetry.reportError(cliError);
|
|
63
|
+
return cliError.exitCode;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=run-cli.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-cli.js","sourceRoot":"","sources":["../src/run-cli.ts"],"names":[],"mappings":"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"}
|
package/dist/schema.d.ts
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const DesignTokensCliConfigSchema: z.ZodObject<{
|
|
3
|
+
srcFilePath: z.ZodOptional<z.ZodCustom<string, string>>;
|
|
4
|
+
distDir: z.ZodOptional<z.ZodCustom<string, string>>;
|
|
5
|
+
targets: z.ZodOptional<z.ZodObject<{
|
|
6
|
+
css: z.ZodOptional<z.ZodObject<{
|
|
7
|
+
enabled: z.ZodBoolean;
|
|
8
|
+
filterTokens: z.ZodOptional<z.ZodCustom<((token: import("@knapsack/types").TokenData) => boolean) | undefined, ((token: import("@knapsack/types").TokenData) => boolean) | undefined>>;
|
|
9
|
+
}, z.core.$strict>>;
|
|
10
|
+
js: z.ZodOptional<z.ZodObject<{
|
|
11
|
+
enabled: z.ZodBoolean;
|
|
12
|
+
filterTokens: z.ZodOptional<z.ZodCustom<((token: import("@knapsack/types").TokenData) => boolean) | undefined, ((token: import("@knapsack/types").TokenData) => boolean) | undefined>>;
|
|
13
|
+
}, z.core.$strict>>;
|
|
14
|
+
android: z.ZodOptional<z.ZodObject<{
|
|
15
|
+
enabled: z.ZodBoolean;
|
|
16
|
+
filterTokens: z.ZodOptional<z.ZodCustom<((token: import("@knapsack/types").TokenData) => boolean) | undefined, ((token: import("@knapsack/types").TokenData) => boolean) | undefined>>;
|
|
17
|
+
}, z.core.$strict>>;
|
|
18
|
+
ios: z.ZodOptional<z.ZodObject<{
|
|
19
|
+
enabled: z.ZodBoolean;
|
|
20
|
+
filterTokens: z.ZodOptional<z.ZodCustom<((token: import("@knapsack/types").TokenData) => boolean) | undefined, ((token: import("@knapsack/types").TokenData) => boolean) | undefined>>;
|
|
21
|
+
}, z.core.$strict>>;
|
|
22
|
+
}, z.core.$strict>>;
|
|
23
|
+
}, z.core.$strict>;
|
|
24
|
+
export declare const TOKEN_TARGET_ID_SET: Set<string>;
|
|
25
|
+
//# sourceMappingURL=schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AA0BxB,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;kBAWtC,CAAC;AAEH,eAAO,MAAM,mBAAmB,aAAoC,CAAC"}
|
package/dist/schema.js
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { isAbsolute, isRelativePath } from '@knapsack/file-utils';
|
|
3
|
+
import { TOKEN_TARGET_IDS } from './types.js';
|
|
4
|
+
const PathSchema = z.custom((val) => {
|
|
5
|
+
return typeof val === 'string' && (isAbsolute(val) || isRelativePath(val));
|
|
6
|
+
}, {
|
|
7
|
+
error: ({ input }) => `Must be either an absolute or relative path. Received: "${input}"`,
|
|
8
|
+
});
|
|
9
|
+
const TokenTargetSchema = z.strictObject({
|
|
10
|
+
enabled: z.boolean(),
|
|
11
|
+
filterTokens: z
|
|
12
|
+
.custom((val) => typeof val === 'function')
|
|
13
|
+
.optional(),
|
|
14
|
+
});
|
|
15
|
+
export const DesignTokensCliConfigSchema = z.strictObject({
|
|
16
|
+
srcFilePath: PathSchema.optional(),
|
|
17
|
+
distDir: PathSchema.optional(),
|
|
18
|
+
targets: z
|
|
19
|
+
.strictObject({
|
|
20
|
+
css: TokenTargetSchema.optional(),
|
|
21
|
+
js: TokenTargetSchema.optional(),
|
|
22
|
+
android: TokenTargetSchema.optional(),
|
|
23
|
+
ios: TokenTargetSchema.optional(),
|
|
24
|
+
})
|
|
25
|
+
.optional(),
|
|
26
|
+
});
|
|
27
|
+
export const TOKEN_TARGET_ID_SET = new Set(TOKEN_TARGET_IDS);
|
|
28
|
+
//# sourceMappingURL=schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAElE,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE9C,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CACzB,CAAC,GAAG,EAAE,EAAE;IACN,OAAO,OAAO,GAAG,KAAK,QAAQ,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7E,CAAC,EACD;IACE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CACnB,2DAA2D,KAAK,GAAG;CACtE,CACF,CAAC;AAEF,MAAM,iBAAiB,GAAG,CAAC,CAAC,YAAY,CAAC;IACvC,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE;IACpB,YAAY,EAAE,CAAC;SACZ,MAAM,CAIL,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,GAAG,KAAK,UAAU,CAAC;SACpC,QAAQ,EAAE;CACd,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,CAAC,YAAY,CAAC;IACxD,WAAW,EAAE,UAAU,CAAC,QAAQ,EAAE;IAClC,OAAO,EAAE,UAAU,CAAC,QAAQ,EAAE;IAC9B,OAAO,EAAE,CAAC;SACP,YAAY,CAAC;QACZ,GAAG,EAAE,iBAAiB,CAAC,QAAQ,EAAE;QACjC,EAAE,EAAE,iBAAiB,CAAC,QAAQ,EAAE;QAChC,OAAO,EAAE,iBAAiB,CAAC,QAAQ,EAAE;QACrC,GAAG,EAAE,iBAAiB,CAAC,QAAQ,EAAE;KAClC,CAAC;SACD,QAAQ,EAAE;CACd,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,mBAAmB,GAAG,IAAI,GAAG,CAAS,gBAAgB,CAAC,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export declare function isTelemetryDisabled(): boolean;
|
|
2
|
+
export declare function createCliTelemetry(): {
|
|
3
|
+
readonly reportError: (error: Error) => Promise<void>;
|
|
4
|
+
};
|
|
5
|
+
export declare function logError(message: string, stderr: NodeJS.WritableStream): void;
|
|
6
|
+
//# sourceMappingURL=telemetry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"telemetry.d.ts","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":"AAiBA,wBAAgB,mBAAmB,IAAI,OAAO,CAE7C;AAED,wBAAgB,kBAAkB,IAAI;IACpC,QAAQ,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACvD,CAuBA;AAED,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,cAAc,GAAG,IAAI,CAE7E"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { findUpPkgJson } from '@knapsack/file-utils';
|
|
2
|
+
import { createSendToDatadog } from '@knapsack/logger/cjs';
|
|
3
|
+
import { fileURLToPath } from 'node:url';
|
|
4
|
+
import { dirname } from 'node:path';
|
|
5
|
+
const disableTelemetryEnvVar = 'KS_DISABLE_TELEMETRY';
|
|
6
|
+
const pkgDir = dirname(fileURLToPath(import.meta.url));
|
|
7
|
+
const { pkg } = findUpPkgJson(pkgDir);
|
|
8
|
+
/**
|
|
9
|
+
* Public Datadog client token (safe to ship in a public package). The same
|
|
10
|
+
* key the `knapsack` CLI uses for best-effort telemetry. Failures here never
|
|
11
|
+
* replace the local stderr error.
|
|
12
|
+
*/
|
|
13
|
+
const DATADOG_PUBLIC_CLIENT_TOKEN = 'pub9a17ae4826c927450539436644ad7eef';
|
|
14
|
+
export function isTelemetryDisabled() {
|
|
15
|
+
return Boolean(process.env[disableTelemetryEnvVar]);
|
|
16
|
+
}
|
|
17
|
+
export function createCliTelemetry() {
|
|
18
|
+
const sendToDatadog = createSendToDatadog({
|
|
19
|
+
env: 'production',
|
|
20
|
+
ddsource: 'nodejs',
|
|
21
|
+
service: 'design-tokens-cli',
|
|
22
|
+
version: pkg?.version,
|
|
23
|
+
keyType: 'publicClientKey',
|
|
24
|
+
key: DATADOG_PUBLIC_CLIENT_TOKEN,
|
|
25
|
+
enabled: !isTelemetryDisabled(),
|
|
26
|
+
});
|
|
27
|
+
return {
|
|
28
|
+
async reportError(error) {
|
|
29
|
+
await sendToDatadog({
|
|
30
|
+
status: 'error',
|
|
31
|
+
message: error.message,
|
|
32
|
+
error,
|
|
33
|
+
metadata: {
|
|
34
|
+
cliCommand: 'build',
|
|
35
|
+
},
|
|
36
|
+
});
|
|
37
|
+
},
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
export function logError(message, stderr) {
|
|
41
|
+
stderr.write(`${message}\n`);
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=telemetry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,MAAM,sBAAsB,GAAG,sBAAsB,CAAC;AAEtD,MAAM,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACvD,MAAM,EAAE,GAAG,EAAE,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;AAEtC;;;;GAIG;AACH,MAAM,2BAA2B,GAAG,qCAAqC,CAAC;AAE1E,MAAM,UAAU,mBAAmB;IACjC,OAAO,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,kBAAkB;IAGhC,MAAM,aAAa,GAAG,mBAAmB,CAAC;QACxC,GAAG,EAAE,YAAY;QACjB,QAAQ,EAAE,QAAQ;QAClB,OAAO,EAAE,mBAAmB;QAC5B,OAAO,EAAE,GAAG,EAAE,OAAO;QACrB,OAAO,EAAE,iBAAiB;QAC1B,GAAG,EAAE,2BAA2B;QAChC,OAAO,EAAE,CAAC,mBAAmB,EAAE;KAChC,CAAC,CAAC;IAEH,OAAO;QACL,KAAK,CAAC,WAAW,CAAC,KAAY;YAC5B,MAAM,aAAa,CAAC;gBAClB,MAAM,EAAE,OAAO;gBACf,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,KAAK;gBACL,QAAQ,EAAE;oBACR,UAAU,EAAE,OAAO;iBACpB;aACF,CAAC,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,OAAe,EAAE,MAA6B;IACrE,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,IAAI,CAAC,CAAC;AAC/B,CAAC"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { ConvertTokenDataToFilesArgs } from '@knapsack/design-token-utils';
|
|
2
|
+
/**
|
|
3
|
+
* Config shape matches `KnapsackConfig['designTokens']` so existing
|
|
4
|
+
* `knapsack.config.cjs` `designTokens` blocks can be copied as-is.
|
|
5
|
+
*/
|
|
6
|
+
export interface DesignTokensCliConfig {
|
|
7
|
+
readonly srcFilePath?: string;
|
|
8
|
+
readonly distDir?: string;
|
|
9
|
+
readonly targets?: ConvertTokenDataToFilesArgs['targets'];
|
|
10
|
+
}
|
|
11
|
+
export declare const TOKEN_TARGET_IDS: readonly ["css", "js", "android", "ios"];
|
|
12
|
+
export type TokenTargetId = (typeof TOKEN_TARGET_IDS)[number];
|
|
13
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,8BAA8B,CAAC;AAEhF;;;GAGG;AACH,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,CAAC,EAAE,2BAA2B,CAAC,SAAS,CAAC,CAAC;CAC3D;AAED,eAAO,MAAM,gBAAgB,0CAA2C,CAAC;AAEzE,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAYA,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,CAAU,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@knapsack/design-tokens-cli",
|
|
3
|
+
"description": "Standalone CLI to build design tokens from a tokens JSON source into per-target files",
|
|
4
|
+
"version": "4.103.0--canary.8158.6e59694.0",
|
|
5
|
+
"bin": {
|
|
6
|
+
"design-tokens-cli": "./dist/cli.js"
|
|
7
|
+
},
|
|
8
|
+
"type": "module",
|
|
9
|
+
"exports": {
|
|
10
|
+
".": {
|
|
11
|
+
"types": "./dist/index.d.ts",
|
|
12
|
+
"default": "./dist/index.js"
|
|
13
|
+
},
|
|
14
|
+
"./package": "./package.json",
|
|
15
|
+
"./package.json": "./package.json"
|
|
16
|
+
},
|
|
17
|
+
"sideEffects": false,
|
|
18
|
+
"scripts": {
|
|
19
|
+
"build": "tsc",
|
|
20
|
+
"clean": "rm -rf ./dist",
|
|
21
|
+
"lint": "eslint ./src --quiet",
|
|
22
|
+
"test": "tsc -p tsconfig.test.json && vitest run"
|
|
23
|
+
},
|
|
24
|
+
"author": "Knapsack (https://www.knapsack.cloud)",
|
|
25
|
+
"dependencies": {
|
|
26
|
+
"@knapsack/design-token-utils": "4.103.0--canary.8158.6e59694.0",
|
|
27
|
+
"@knapsack/file-utils": "4.103.0--canary.8158.6e59694.0",
|
|
28
|
+
"@knapsack/logger": "4.103.0--canary.8158.6e59694.0",
|
|
29
|
+
"@knapsack/types": "4.103.0--canary.8158.6e59694.0",
|
|
30
|
+
"commander": "^14.0.3",
|
|
31
|
+
"zod": "^4.5.4"
|
|
32
|
+
},
|
|
33
|
+
"devDependencies": {
|
|
34
|
+
"@knapsack/eslint-config-starter": "4.103.0--canary.8158.6e59694.0",
|
|
35
|
+
"@knapsack/typescript-config-starter": "4.103.0--canary.8158.6e59694.0",
|
|
36
|
+
"@types/node": "^24.13.2",
|
|
37
|
+
"eslint": "^9.20.0",
|
|
38
|
+
"typescript": "^6.0.3",
|
|
39
|
+
"vitest": "^4.1.11"
|
|
40
|
+
},
|
|
41
|
+
"engines": {
|
|
42
|
+
"node": ">=24.0.0 <24.17.0 || >=24.18.0 <25.0.0"
|
|
43
|
+
},
|
|
44
|
+
"files": [
|
|
45
|
+
"dist"
|
|
46
|
+
],
|
|
47
|
+
"homepage": "https://www.knapsack.cloud",
|
|
48
|
+
"keywords": [
|
|
49
|
+
"design-system",
|
|
50
|
+
"design-tokens",
|
|
51
|
+
"knapsack"
|
|
52
|
+
],
|
|
53
|
+
"license": "GPL-2.0-or-later",
|
|
54
|
+
"publishConfig": {
|
|
55
|
+
"access": "public"
|
|
56
|
+
},
|
|
57
|
+
"repository": {
|
|
58
|
+
"url": "https://github.com/knapsack-labs/app-monorepo",
|
|
59
|
+
"directory": "packages/design-tokens-cli",
|
|
60
|
+
"type": "git"
|
|
61
|
+
},
|
|
62
|
+
"gitHead": "6e59694e3897a0f0c86e7b4492e8be856bc39e78"
|
|
63
|
+
}
|