zcb 0.3.8 → 0.3.10

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.
@@ -1 +1 @@
1
- {"version":3,"file":"cli.cjs","sources":["../../src/transformers/removeDisabledSlices.ts","../../src/utils/transformConfig.ts","../../src/utils/transformWriteConfig.ts","../../src/transformers/setupExperiments.ts","../../src/utils/importValidateTransformWriteConfig.ts","../../src/cli.ts"],"sourcesContent":["import { type AnyRecord, type TransformConfigHandlerSync } from '../types.ts';\n\nexport const removeDisabledSlices: TransformConfigHandlerSync = <Config extends AnyRecord>(\n clone: Config,\n config: Config,\n) => {\n if ('__disabled' in config) {\n return {\n action: 'DELETE_NODE',\n };\n }\n\n return {\n value: clone,\n };\n};\n","import { castArray, isPlainObject } from 'lodash-es';\nimport { type AnyRecord, type TransformConfigHandler, type TransformConfigHandlerSync } from '../types.ts';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst transformArray = (list: any[], handler: TransformConfigHandler | TransformConfigHandler[]): Promise<any[]> =>\n Promise.all(\n list.map(entry => {\n if (isPlainObject(entry)) {\n return transformConfig(entry, handler);\n }\n\n if (Array.isArray(entry)) {\n return transformArray(entry, handler);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return entry;\n }),\n );\n\nexport const transformConfig = async <Config extends AnyRecord>(\n config: Config,\n handler: TransformConfigHandler | TransformConfigHandler[] = [],\n): Promise<Config> => {\n // Typing gets too complicated without casting.\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n let transform = {} as Config;\n const handlers = castArray(handler);\n\n for (const callback of handlers) {\n const result = await Promise.resolve(callback(transform, config));\n\n if (result.action === 'DELETE_NODE') {\n // Typing gets too complicated without casting.\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n return {} as Config;\n }\n\n if (result.value) {\n transform = result.value;\n }\n\n if (result.action === 'SKIP_NODE') {\n return transform;\n }\n }\n\n for (const key in config) {\n const value = config[key];\n\n if (isPlainObject(value)) {\n transform[key] = await transformConfig(value, handler);\n } else if (Array.isArray(value)) {\n // TODO: Need to look at this\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n transform[key] = (await transformArray(value, handler)) as Config[Extract<keyof Config, string>];\n } else {\n transform[key] = value;\n }\n }\n\n return transform;\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst transformArraySync = (list: any[], handler: TransformConfigHandlerSync | TransformConfigHandlerSync[]): any[] =>\n list.map(entry => {\n if (isPlainObject(entry)) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return transformConfigSync(entry, handler);\n }\n\n if (Array.isArray(entry)) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return transformArraySync(entry, handler);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return entry;\n });\n\nexport const transformConfigSync = <Config extends AnyRecord>(\n config: Config,\n handler: TransformConfigHandlerSync | TransformConfigHandlerSync[] = [],\n): Config => {\n // Typing gets too complicated without casting.\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n let transform = {} as Config;\n const handlers = castArray(handler);\n\n for (const callback of handlers) {\n const result = callback(transform, config);\n\n if (result.action === 'DELETE_NODE') {\n // Typing gets too complicated without casting.\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n return {} as Config;\n }\n\n if (result.value) {\n transform = result.value;\n }\n\n if (result.action === 'SKIP_NODE') {\n return transform;\n }\n }\n\n for (const key in config) {\n // TODO: Need to look at this\n\n const value = config[key];\n\n if (isPlainObject(value)) {\n // TODO: Need to look at this\n\n transform[key] = transformConfigSync(value, handler);\n } else if (Array.isArray(value)) {\n // TODO: Need to look at this\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n transform[key] = transformArraySync(value, handler) as Config[Extract<keyof Config, string>];\n } else {\n // TODO: Need to look at this\n\n transform[key] = value;\n }\n }\n\n return transform;\n};\n","import { outputFileSync } from 'fs-extra/esm';\nimport Handlebars from 'handlebars';\nimport { readFileSync } from 'node:fs';\nimport path from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport shelljs from 'shelljs';\nimport { removeDisabledSlices } from '../transformers/removeDisabledSlices.ts';\nimport { setupExperiments } from '../transformers/setupExperiments.ts';\nimport { type TransformConfigHandler, type WriteConfigOptions } from '../types.ts';\nimport { transformConfig } from './transformConfig.ts';\n\nexport const transformWriteConfig = async <Config extends object>(\n config: Config,\n { experimentsCallback, outputFile }: WriteConfigOptions,\n): Promise<void> => {\n const handlers: TransformConfigHandler[] = [removeDisabledSlices];\n\n if (experimentsCallback) {\n handlers.push(setupExperiments(experimentsCallback));\n }\n\n const dirname = path.dirname(fileURLToPath(import.meta.url));\n\n const template = Handlebars.compile(\n readFileSync(path.resolve(dirname, '../templates/config.ts.hbs'), { encoding: 'utf8' }),\n );\n\n const output = template({\n config: JSON.stringify(\n await transformConfig(config, handlers),\n (_k, v: unknown) => (v === undefined ? 'undefined' : v),\n 2,\n ),\n })\n .replaceAll(/\"([A-Za-z][\\dA-Za-z]+)\":/g, '$1:')\n .replaceAll('\"undefined\"', 'undefined');\n\n shelljs.echo(`zcd watch => writing to file: ${outputFile}`);\n shelljs.echo(`zcd watch => content to write:\\n${output}\\n`);\n outputFileSync(path.resolve(process.cwd(), outputFile), output);\n};\n","import { type AnyRecord, type SetupExperimentsCallback, type TransformConfigHandler } from '../types.ts';\n\nexport const setupExperiments =\n (callback: SetupExperimentsCallback): TransformConfigHandler =>\n async <Config extends AnyRecord>(clone: Config, config: Config) => {\n if ('__experiment' in config && typeof config.__experiment === 'string') {\n const buckets = await callback(config.__experiment, clone, config);\n\n // @ts-expect-error private property\n clone.__experiment = {\n buckets,\n id: config.__experiment,\n };\n\n return {\n value: clone,\n };\n }\n\n return {\n value: clone,\n };\n };\n","import { resolve } from 'node:path';\nimport shelljs from 'shelljs';\nimport { type CliCommands } from '../cli.ts';\nimport { type ConfigBuilder } from '../createConfigBuilder.ts';\nimport { type SetupExperimentsCallback } from '../types.ts';\nimport { transformWriteConfig } from './transformWriteConfig.ts';\n\nexport const importValidateTransformWriteConfig = (\n inputFile: string,\n outputFile: string,\n command: CliCommands,\n experimentCallbackFile?: string,\n): void => {\n import(resolve(process.cwd(), inputFile))\n // TODO: Will revisit\n // eslint-disable-next-line unicorn/prefer-await\n .then(({ default: configBuilder }: { default: ConfigBuilder<object> }) => {\n if (!configBuilder.$validate()) {\n shelljs.echo(`zcd ${command} => invalid config`);\n shelljs.echo(`zcd ${command} => config values:\\n${configBuilder.$toJson()}\\n`);\n shelljs.echo(`zcd ${command} => errors:\\n${JSON.stringify(configBuilder.$errors(), undefined, 2)}\\n`);\n shelljs.exit(1);\n }\n\n shelljs.echo('zcd ${command} => valid config');\n shelljs.echo(`zcd ${command} => config values:\\n${configBuilder.$toJson()}\\n`);\n\n if (experimentCallbackFile) {\n import(resolve(process.cwd(), experimentCallbackFile))\n // TODO: Will revisit\n // eslint-disable-next-line unicorn/prefer-await\n .then(({ default: experimentsCallback }: { default: SetupExperimentsCallback }) => {\n void transformWriteConfig(configBuilder.$values(), { experimentsCallback, outputFile });\n })\n // TODO: Will revisit\n // eslint-disable-next-line unicorn/prefer-await\n .catch((error: unknown) => {\n if (!(error instanceof Error)) {\n return;\n }\n\n shelljs.echo(`zcd ${command} => error message: ${error.message}`);\n\n if (error.stack) {\n shelljs.echo(`zcd ${command} => error stack:\\n${error.stack}\\n`);\n }\n });\n\n return;\n }\n\n void transformWriteConfig(configBuilder.$values(), { outputFile });\n })\n // TODO: Will revisit\n // eslint-disable-next-line unicorn/prefer-await\n .catch((error: unknown) => {\n if (!(error instanceof Error)) {\n return;\n }\n\n shelljs.echo(`zcd ${command} => error message: ${error.message}`);\n\n if (error.stack) {\n shelljs.echo(`zcd ${command} => error stack:\\n${error.stack}\\n`);\n }\n });\n};\n","import { watchFile } from 'node:fs';\nimport { resolve } from 'node:path';\nimport shelljs from 'shelljs';\nimport yargs, { type Argv } from 'yargs';\nimport { hideBin } from 'yargs/helpers';\nimport { importValidateTransformWriteConfig } from './utils/importValidateTransformWriteConfig.ts';\n\nexport type CliCommands = 'build' | 'watch';\n\nexport type CliArguments = Argv<{\n 'experiments-callback-file'?: string;\n 'input-file': string;\n 'output-file': string;\n}>;\n\nconst generateArguments = (cmdYargs: Argv): CliArguments =>\n cmdYargs\n .positional('input-file', {\n demandOption: true,\n desc: 'The relative path to the config builder root file',\n type: 'string',\n })\n .positional('output-file', {\n demandOption: true,\n desc: 'The relative path to the output config file',\n type: 'string',\n })\n .option('experiments-callback-file', {\n desc: 'The relative path to the experiment callback file',\n type: 'string',\n });\n\nexport const cli = (): void => {\n // yargs does not provide a way to pass generic to type args.\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n const argv = yargs(hideBin(process.argv)) as Argv<{\n 'experiments-callback-file'?: string;\n 'input-file': string;\n 'output-file': string;\n }>;\n\n void argv\n .command(\n 'watch <input-file> <output-file>',\n 'Watch a config builder and write config',\n cmdYargs => generateArguments(cmdYargs),\n cmdYargs => {\n shelljs.echo(`zcd watch => watching file: ${cmdYargs['input-file']}`);\n\n watchFile(resolve(process.cwd(), cmdYargs['input-file']), () => {\n shelljs.echo('zcd watch => file change detected');\n\n importValidateTransformWriteConfig(\n cmdYargs['input-file'],\n cmdYargs['output-file'],\n 'watch',\n cmdYargs['experiments-callback-file'],\n );\n });\n },\n )\n .command(\n 'build <input-file> <output-file>',\n 'Write config from a config builder',\n cmdYargs => generateArguments(cmdYargs),\n cmdYargs => {\n shelljs.echo(`zcd build => building file: ${cmdYargs['input-file']}`);\n\n importValidateTransformWriteConfig(\n cmdYargs['input-file'],\n cmdYargs['output-file'],\n 'build',\n cmdYargs['experiments-callback-file'],\n );\n },\n )\n .help()\n .parseAsync();\n};\n"],"names":["removeDisabledSlices","clone","config","action","value","transformArray","list","handler","Promise","all","map","entry","isPlainObject","transformConfig","Array","isArray","async","transform","handlers","castArray","callback","result","resolve","key","transformWriteConfig","experimentsCallback","outputFile","push","__experiment","buckets","id","dirname","path","fileURLToPath","document","require","pathToFileURL","__filename","href","_documentCurrentScript","tagName","toUpperCase","src","URL","baseURI","output","Handlebars","compile","readFileSync","encoding","template","JSON","stringify","_k","v","undefined","replaceAll","shelljs","echo","outputFileSync","process","cwd","importValidateTransformWriteConfig","inputFile","command","experimentCallbackFile","import","then","default","configBuilder","$validate","$toJson","$errors","exit","$values","catch","error","Error","message","stack","generateArguments","cmdYargs","positional","demandOption","desc","type","option","yargs","hideBin","argv","watchFile","help","parseAsync"],"mappings":"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"}
1
+ {"version":3,"file":"cli.cjs","sources":["../../src/transformers/removeDisabledSlices.ts","../../src/utils/transformConfig.ts","../../src/utils/transformWriteConfig.ts","../../src/transformers/setupExperiments.ts","../../src/utils/importValidateTransformWriteConfig.ts","../../src/cli.ts"],"sourcesContent":["import { type AnyRecord, type TransformConfigHandlerSync } from '../types.ts';\n\nexport const removeDisabledSlices: TransformConfigHandlerSync = <Config extends AnyRecord>(\n clone: Config,\n config: Config,\n) => {\n if ('__disabled' in config) {\n return {\n action: 'DELETE_NODE',\n };\n }\n\n return {\n value: clone,\n };\n};\n","import { castArray, isPlainObject } from 'lodash-es';\nimport { type AnyRecord, type TransformConfigHandler, type TransformConfigHandlerSync } from '../types.ts';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst transformArray = (list: any[], handler: TransformConfigHandler | TransformConfigHandler[]): Promise<any[]> =>\n Promise.all(\n list.map(entry => {\n if (isPlainObject(entry)) {\n return transformConfig(entry, handler);\n }\n\n if (Array.isArray(entry)) {\n return transformArray(entry, handler);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return entry;\n }),\n );\n\nexport const transformConfig = async <Config extends AnyRecord>(\n config: Config,\n handler: TransformConfigHandler | TransformConfigHandler[] = [],\n): Promise<Config> => {\n // Typing gets too complicated without casting.\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n let transform = {} as Config;\n const handlers = castArray(handler);\n\n for (const callback of handlers) {\n const result = await Promise.resolve(callback(transform, config));\n\n if (result.action === 'DELETE_NODE') {\n // Typing gets too complicated without casting.\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n return {} as Config;\n }\n\n if (result.value) {\n transform = result.value;\n }\n\n if (result.action === 'SKIP_NODE') {\n return transform;\n }\n }\n\n for (const key in config) {\n const value = config[key];\n\n if (isPlainObject(value)) {\n transform[key] = await transformConfig(value, handler);\n } else if (Array.isArray(value)) {\n // TODO: Need to look at this\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n transform[key] = (await transformArray(value, handler)) as Config[Extract<keyof Config, string>];\n } else {\n transform[key] = value;\n }\n }\n\n return transform;\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst transformArraySync = (list: any[], handler: TransformConfigHandlerSync | TransformConfigHandlerSync[]): any[] =>\n list.map(entry => {\n if (isPlainObject(entry)) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return transformConfigSync(entry, handler);\n }\n\n if (Array.isArray(entry)) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return transformArraySync(entry, handler);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return entry;\n });\n\nexport const transformConfigSync = <Config extends AnyRecord>(\n config: Config,\n handler: TransformConfigHandlerSync | TransformConfigHandlerSync[] = [],\n): Config => {\n // Typing gets too complicated without casting.\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n let transform = {} as Config;\n const handlers = castArray(handler);\n\n for (const callback of handlers) {\n const result = callback(transform, config);\n\n if (result.action === 'DELETE_NODE') {\n // Typing gets too complicated without casting.\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n return {} as Config;\n }\n\n if (result.value) {\n transform = result.value;\n }\n\n if (result.action === 'SKIP_NODE') {\n return transform;\n }\n }\n\n for (const key in config) {\n // TODO: Need to look at this\n\n const value = config[key];\n\n if (isPlainObject(value)) {\n // TODO: Need to look at this\n\n transform[key] = transformConfigSync(value, handler);\n } else if (Array.isArray(value)) {\n // TODO: Need to look at this\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n transform[key] = transformArraySync(value, handler) as Config[Extract<keyof Config, string>];\n } else {\n // TODO: Need to look at this\n\n transform[key] = value;\n }\n }\n\n return transform;\n};\n","import { outputFileSync } from 'fs-extra/esm';\nimport Handlebars from 'handlebars';\nimport { readFileSync } from 'node:fs';\nimport path from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport shelljs from 'shelljs';\nimport { removeDisabledSlices } from '../transformers/removeDisabledSlices.ts';\nimport { setupExperiments } from '../transformers/setupExperiments.ts';\nimport { type TransformConfigHandler, type WriteConfigOptions } from '../types.ts';\nimport { transformConfig } from './transformConfig.ts';\n\nexport const transformWriteConfig = async <Config extends object>(\n config: Config,\n { experimentsCallback, outputFile }: WriteConfigOptions,\n): Promise<void> => {\n const handlers: TransformConfigHandler[] = [removeDisabledSlices];\n\n if (experimentsCallback) {\n handlers.push(setupExperiments(experimentsCallback));\n }\n\n const dirname = path.dirname(fileURLToPath(import.meta.url));\n\n const template = Handlebars.compile(\n readFileSync(path.resolve(dirname, '../templates/config.ts.hbs'), { encoding: 'utf8' }),\n );\n\n const output = template({\n config: JSON.stringify(\n await transformConfig(config, handlers),\n (_k, v: unknown) => (v === undefined ? 'undefined' : v),\n 2,\n ),\n })\n .replaceAll(/\"([A-Za-z][\\dA-Za-z]+)\":/g, '$1:')\n .replaceAll('\"undefined\"', 'undefined');\n\n shelljs.echo(`zcd watch => writing to file: ${outputFile}`);\n shelljs.echo(`zcd watch => content to write:\\n${output}\\n`);\n outputFileSync(path.resolve(process.cwd(), outputFile), output);\n};\n","import { type AnyRecord, type SetupExperimentsCallback, type TransformConfigHandler } from '../types.ts';\n\nexport const setupExperiments =\n (callback: SetupExperimentsCallback): TransformConfigHandler =>\n async <Config extends AnyRecord>(clone: Config, config: Config) => {\n if ('__experiment' in config && typeof config.__experiment === 'string') {\n const buckets = await callback(config.__experiment, clone, config);\n\n // @ts-expect-error private property\n clone.__experiment = {\n buckets,\n id: config.__experiment,\n };\n\n return {\n value: clone,\n };\n }\n\n return {\n value: clone,\n };\n };\n","import { resolve } from 'node:path';\nimport shelljs from 'shelljs';\nimport { type CliCommands } from '../cli.ts';\nimport { type ConfigBuilder } from '../createConfigBuilder.ts';\nimport { type SetupExperimentsCallback } from '../types.ts';\nimport { transformWriteConfig } from './transformWriteConfig.ts';\n\nexport const importValidateTransformWriteConfig = (\n inputFile: string,\n outputFile: string,\n command: CliCommands,\n experimentCallbackFile?: string,\n): void => {\n import(resolve(process.cwd(), inputFile))\n // TODO: Will revisit\n // eslint-disable-next-line unicorn/prefer-await\n .then(({ default: configBuilder }: { default: ConfigBuilder<object> }) => {\n if (!configBuilder.$validate()) {\n shelljs.echo(`zcd ${command} => invalid config`);\n shelljs.echo(`zcd ${command} => config values:\\n${configBuilder.$toJson()}\\n`);\n shelljs.echo(`zcd ${command} => errors:\\n${JSON.stringify(configBuilder.$errors(), undefined, 2)}\\n`);\n shelljs.exit(1);\n }\n\n shelljs.echo('zcd ${command} => valid config');\n shelljs.echo(`zcd ${command} => config values:\\n${configBuilder.$toJson()}\\n`);\n\n if (experimentCallbackFile) {\n import(resolve(process.cwd(), experimentCallbackFile))\n // TODO: Will revisit\n // eslint-disable-next-line unicorn/prefer-await\n .then(({ default: experimentsCallback }: { default: SetupExperimentsCallback }) => {\n void transformWriteConfig(configBuilder.$values(), { experimentsCallback, outputFile });\n })\n // TODO: Will revisit\n // eslint-disable-next-line unicorn/prefer-await\n .catch((error: unknown) => {\n if (!(error instanceof Error)) {\n return;\n }\n\n shelljs.echo(`zcd ${command} => error message: ${error.message}`);\n\n if (error.stack) {\n shelljs.echo(`zcd ${command} => error stack:\\n${error.stack}\\n`);\n }\n });\n\n return;\n }\n\n void transformWriteConfig(configBuilder.$values(), { outputFile });\n })\n // TODO: Will revisit\n // eslint-disable-next-line unicorn/prefer-await\n .catch((error: unknown) => {\n if (!(error instanceof Error)) {\n return;\n }\n\n shelljs.echo(`zcd ${command} => error message: ${error.message}`);\n\n if (error.stack) {\n shelljs.echo(`zcd ${command} => error stack:\\n${error.stack}\\n`);\n }\n });\n};\n","import { watchFile } from 'node:fs';\nimport { resolve } from 'node:path';\nimport shelljs from 'shelljs';\nimport yargs, { type Argv } from 'yargs';\nimport { hideBin } from 'yargs/helpers';\nimport { importValidateTransformWriteConfig } from './utils/importValidateTransformWriteConfig.ts';\n\nexport type CliCommands = 'build' | 'watch';\n\nexport type CliArguments = Argv<{\n 'experiments-callback-file'?: string;\n 'input-file': string;\n 'output-file': string;\n}>;\n\nconst generateArguments = (cmdYargs: Argv): CliArguments =>\n cmdYargs\n .positional('input-file', {\n demandOption: true,\n desc: 'The relative path to the config builder root file',\n type: 'string',\n })\n .positional('output-file', {\n demandOption: true,\n desc: 'The relative path to the output config file',\n type: 'string',\n })\n .option('experiments-callback-file', {\n desc: 'The relative path to the experiment callback file',\n type: 'string',\n });\n\nexport const cli = (): void => {\n // yargs does not provide a way to pass generic to type args.\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n const argv = yargs(hideBin(process.argv)) as Argv<{\n 'experiments-callback-file'?: string;\n 'input-file': string;\n 'output-file': string;\n }>;\n\n void argv\n .command(\n 'watch <input-file> <output-file>',\n 'Watch a config builder and write config',\n cmdYargs => generateArguments(cmdYargs),\n cmdYargs => {\n shelljs.echo(`zcd watch => watching file: ${cmdYargs['input-file']}`);\n\n watchFile(resolve(process.cwd(), cmdYargs['input-file']), () => {\n shelljs.echo('zcd watch => file change detected');\n\n importValidateTransformWriteConfig(\n cmdYargs['input-file'],\n cmdYargs['output-file'],\n 'watch',\n cmdYargs['experiments-callback-file'],\n );\n });\n },\n )\n .command(\n 'build <input-file> <output-file>',\n 'Write config from a config builder',\n cmdYargs => generateArguments(cmdYargs),\n cmdYargs => {\n shelljs.echo(`zcd build => building file: ${cmdYargs['input-file']}`);\n\n importValidateTransformWriteConfig(\n cmdYargs['input-file'],\n cmdYargs['output-file'],\n 'build',\n cmdYargs['experiments-callback-file'],\n );\n },\n )\n .help()\n .parseAsync();\n};\n"],"names":["removeDisabledSlices","clone","config","action","value","transformArray","list","handler","Promise","all","map","entry","isPlainObject","transformConfig","Array","isArray","async","transform","handlers","castArray","callback","result","resolve","key","transformWriteConfig","experimentsCallback","outputFile","push","__experiment","buckets","id","dirname","path","fileURLToPath","document","require","pathToFileURL","__filename","href","_documentCurrentScript","tagName","toUpperCase","src","URL","baseURI","output","Handlebars","compile","readFileSync","encoding","template","JSON","stringify","_k","v","undefined","replaceAll","shelljs","echo","outputFileSync","process","cwd","importValidateTransformWriteConfig","inputFile","command","experimentCallbackFile","then","default","configBuilder","$validate","$toJson","$errors","exit","$values","catch","error","Error","message","stack","generateArguments","cmdYargs","positional","demandOption","desc","type","option","yargs","hideBin","argv","watchFile","help","parseAsync"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"cli.mjs","sources":["../../src/transformers/removeDisabledSlices.ts","../../src/utils/transformConfig.ts","../../src/utils/transformWriteConfig.ts","../../src/transformers/setupExperiments.ts","../../src/utils/importValidateTransformWriteConfig.ts","../../src/cli.ts"],"sourcesContent":["import { type AnyRecord, type TransformConfigHandlerSync } from '../types.ts';\n\nexport const removeDisabledSlices: TransformConfigHandlerSync = <Config extends AnyRecord>(\n clone: Config,\n config: Config,\n) => {\n if ('__disabled' in config) {\n return {\n action: 'DELETE_NODE',\n };\n }\n\n return {\n value: clone,\n };\n};\n","import { castArray, isPlainObject } from 'lodash-es';\nimport { type AnyRecord, type TransformConfigHandler, type TransformConfigHandlerSync } from '../types.ts';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst transformArray = (list: any[], handler: TransformConfigHandler | TransformConfigHandler[]): Promise<any[]> =>\n Promise.all(\n list.map(entry => {\n if (isPlainObject(entry)) {\n return transformConfig(entry, handler);\n }\n\n if (Array.isArray(entry)) {\n return transformArray(entry, handler);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return entry;\n }),\n );\n\nexport const transformConfig = async <Config extends AnyRecord>(\n config: Config,\n handler: TransformConfigHandler | TransformConfigHandler[] = [],\n): Promise<Config> => {\n // Typing gets too complicated without casting.\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n let transform = {} as Config;\n const handlers = castArray(handler);\n\n for (const callback of handlers) {\n const result = await Promise.resolve(callback(transform, config));\n\n if (result.action === 'DELETE_NODE') {\n // Typing gets too complicated without casting.\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n return {} as Config;\n }\n\n if (result.value) {\n transform = result.value;\n }\n\n if (result.action === 'SKIP_NODE') {\n return transform;\n }\n }\n\n for (const key in config) {\n const value = config[key];\n\n if (isPlainObject(value)) {\n transform[key] = await transformConfig(value, handler);\n } else if (Array.isArray(value)) {\n // TODO: Need to look at this\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n transform[key] = (await transformArray(value, handler)) as Config[Extract<keyof Config, string>];\n } else {\n transform[key] = value;\n }\n }\n\n return transform;\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst transformArraySync = (list: any[], handler: TransformConfigHandlerSync | TransformConfigHandlerSync[]): any[] =>\n list.map(entry => {\n if (isPlainObject(entry)) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return transformConfigSync(entry, handler);\n }\n\n if (Array.isArray(entry)) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return transformArraySync(entry, handler);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return entry;\n });\n\nexport const transformConfigSync = <Config extends AnyRecord>(\n config: Config,\n handler: TransformConfigHandlerSync | TransformConfigHandlerSync[] = [],\n): Config => {\n // Typing gets too complicated without casting.\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n let transform = {} as Config;\n const handlers = castArray(handler);\n\n for (const callback of handlers) {\n const result = callback(transform, config);\n\n if (result.action === 'DELETE_NODE') {\n // Typing gets too complicated without casting.\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n return {} as Config;\n }\n\n if (result.value) {\n transform = result.value;\n }\n\n if (result.action === 'SKIP_NODE') {\n return transform;\n }\n }\n\n for (const key in config) {\n // TODO: Need to look at this\n\n const value = config[key];\n\n if (isPlainObject(value)) {\n // TODO: Need to look at this\n\n transform[key] = transformConfigSync(value, handler);\n } else if (Array.isArray(value)) {\n // TODO: Need to look at this\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n transform[key] = transformArraySync(value, handler) as Config[Extract<keyof Config, string>];\n } else {\n // TODO: Need to look at this\n\n transform[key] = value;\n }\n }\n\n return transform;\n};\n","import { outputFileSync } from 'fs-extra/esm';\nimport Handlebars from 'handlebars';\nimport { readFileSync } from 'node:fs';\nimport path from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport shelljs from 'shelljs';\nimport { removeDisabledSlices } from '../transformers/removeDisabledSlices.ts';\nimport { setupExperiments } from '../transformers/setupExperiments.ts';\nimport { type TransformConfigHandler, type WriteConfigOptions } from '../types.ts';\nimport { transformConfig } from './transformConfig.ts';\n\nexport const transformWriteConfig = async <Config extends object>(\n config: Config,\n { experimentsCallback, outputFile }: WriteConfigOptions,\n): Promise<void> => {\n const handlers: TransformConfigHandler[] = [removeDisabledSlices];\n\n if (experimentsCallback) {\n handlers.push(setupExperiments(experimentsCallback));\n }\n\n const dirname = path.dirname(fileURLToPath(import.meta.url));\n\n const template = Handlebars.compile(\n readFileSync(path.resolve(dirname, '../templates/config.ts.hbs'), { encoding: 'utf8' }),\n );\n\n const output = template({\n config: JSON.stringify(\n await transformConfig(config, handlers),\n (_k, v: unknown) => (v === undefined ? 'undefined' : v),\n 2,\n ),\n })\n .replaceAll(/\"([A-Za-z][\\dA-Za-z]+)\":/g, '$1:')\n .replaceAll('\"undefined\"', 'undefined');\n\n shelljs.echo(`zcd watch => writing to file: ${outputFile}`);\n shelljs.echo(`zcd watch => content to write:\\n${output}\\n`);\n outputFileSync(path.resolve(process.cwd(), outputFile), output);\n};\n","import { type AnyRecord, type SetupExperimentsCallback, type TransformConfigHandler } from '../types.ts';\n\nexport const setupExperiments =\n (callback: SetupExperimentsCallback): TransformConfigHandler =>\n async <Config extends AnyRecord>(clone: Config, config: Config) => {\n if ('__experiment' in config && typeof config.__experiment === 'string') {\n const buckets = await callback(config.__experiment, clone, config);\n\n // @ts-expect-error private property\n clone.__experiment = {\n buckets,\n id: config.__experiment,\n };\n\n return {\n value: clone,\n };\n }\n\n return {\n value: clone,\n };\n };\n","import { resolve } from 'node:path';\nimport shelljs from 'shelljs';\nimport { type CliCommands } from '../cli.ts';\nimport { type ConfigBuilder } from '../createConfigBuilder.ts';\nimport { type SetupExperimentsCallback } from '../types.ts';\nimport { transformWriteConfig } from './transformWriteConfig.ts';\n\nexport const importValidateTransformWriteConfig = (\n inputFile: string,\n outputFile: string,\n command: CliCommands,\n experimentCallbackFile?: string,\n): void => {\n import(resolve(process.cwd(), inputFile))\n // TODO: Will revisit\n // eslint-disable-next-line unicorn/prefer-await\n .then(({ default: configBuilder }: { default: ConfigBuilder<object> }) => {\n if (!configBuilder.$validate()) {\n shelljs.echo(`zcd ${command} => invalid config`);\n shelljs.echo(`zcd ${command} => config values:\\n${configBuilder.$toJson()}\\n`);\n shelljs.echo(`zcd ${command} => errors:\\n${JSON.stringify(configBuilder.$errors(), undefined, 2)}\\n`);\n shelljs.exit(1);\n }\n\n shelljs.echo('zcd ${command} => valid config');\n shelljs.echo(`zcd ${command} => config values:\\n${configBuilder.$toJson()}\\n`);\n\n if (experimentCallbackFile) {\n import(resolve(process.cwd(), experimentCallbackFile))\n // TODO: Will revisit\n // eslint-disable-next-line unicorn/prefer-await\n .then(({ default: experimentsCallback }: { default: SetupExperimentsCallback }) => {\n void transformWriteConfig(configBuilder.$values(), { experimentsCallback, outputFile });\n })\n // TODO: Will revisit\n // eslint-disable-next-line unicorn/prefer-await\n .catch((error: unknown) => {\n if (!(error instanceof Error)) {\n return;\n }\n\n shelljs.echo(`zcd ${command} => error message: ${error.message}`);\n\n if (error.stack) {\n shelljs.echo(`zcd ${command} => error stack:\\n${error.stack}\\n`);\n }\n });\n\n return;\n }\n\n void transformWriteConfig(configBuilder.$values(), { outputFile });\n })\n // TODO: Will revisit\n // eslint-disable-next-line unicorn/prefer-await\n .catch((error: unknown) => {\n if (!(error instanceof Error)) {\n return;\n }\n\n shelljs.echo(`zcd ${command} => error message: ${error.message}`);\n\n if (error.stack) {\n shelljs.echo(`zcd ${command} => error stack:\\n${error.stack}\\n`);\n }\n });\n};\n","import { watchFile } from 'node:fs';\nimport { resolve } from 'node:path';\nimport shelljs from 'shelljs';\nimport yargs, { type Argv } from 'yargs';\nimport { hideBin } from 'yargs/helpers';\nimport { importValidateTransformWriteConfig } from './utils/importValidateTransformWriteConfig.ts';\n\nexport type CliCommands = 'build' | 'watch';\n\nexport type CliArguments = Argv<{\n 'experiments-callback-file'?: string;\n 'input-file': string;\n 'output-file': string;\n}>;\n\nconst generateArguments = (cmdYargs: Argv): CliArguments =>\n cmdYargs\n .positional('input-file', {\n demandOption: true,\n desc: 'The relative path to the config builder root file',\n type: 'string',\n })\n .positional('output-file', {\n demandOption: true,\n desc: 'The relative path to the output config file',\n type: 'string',\n })\n .option('experiments-callback-file', {\n desc: 'The relative path to the experiment callback file',\n type: 'string',\n });\n\nexport const cli = (): void => {\n // yargs does not provide a way to pass generic to type args.\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n const argv = yargs(hideBin(process.argv)) as Argv<{\n 'experiments-callback-file'?: string;\n 'input-file': string;\n 'output-file': string;\n }>;\n\n void argv\n .command(\n 'watch <input-file> <output-file>',\n 'Watch a config builder and write config',\n cmdYargs => generateArguments(cmdYargs),\n cmdYargs => {\n shelljs.echo(`zcd watch => watching file: ${cmdYargs['input-file']}`);\n\n watchFile(resolve(process.cwd(), cmdYargs['input-file']), () => {\n shelljs.echo('zcd watch => file change detected');\n\n importValidateTransformWriteConfig(\n cmdYargs['input-file'],\n cmdYargs['output-file'],\n 'watch',\n cmdYargs['experiments-callback-file'],\n );\n });\n },\n )\n .command(\n 'build <input-file> <output-file>',\n 'Write config from a config builder',\n cmdYargs => generateArguments(cmdYargs),\n cmdYargs => {\n shelljs.echo(`zcd build => building file: ${cmdYargs['input-file']}`);\n\n importValidateTransformWriteConfig(\n cmdYargs['input-file'],\n cmdYargs['output-file'],\n 'build',\n cmdYargs['experiments-callback-file'],\n );\n },\n )\n .help()\n .parseAsync();\n};\n"],"names":["removeDisabledSlices","clone","config","action","value","transformArray","list","handler","Promise","all","map","entry","isPlainObject","transformConfig","Array","isArray","async","transform","handlers","castArray","callback","result","resolve","key","transformWriteConfig","experimentsCallback","outputFile","push","__experiment","buckets","id","dirname","path","fileURLToPath","url","output","Handlebars","compile","readFileSync","encoding","template","JSON","stringify","_k","v","undefined","replaceAll","shelljs","echo","outputFileSync","process","cwd","importValidateTransformWriteConfig","inputFile","command","experimentCallbackFile","import","then","default","configBuilder","$validate","$toJson","$errors","exit","$values","catch","error","Error","message","stack","generateArguments","cmdYargs","positional","demandOption","desc","type","option","cli","yargs","hideBin","argv","watchFile","help","parseAsync"],"mappings":"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"}
1
+ {"version":3,"file":"cli.mjs","sources":["../../src/transformers/removeDisabledSlices.ts","../../src/utils/transformConfig.ts","../../src/utils/transformWriteConfig.ts","../../src/transformers/setupExperiments.ts","../../src/utils/importValidateTransformWriteConfig.ts","../../src/cli.ts"],"sourcesContent":["import { type AnyRecord, type TransformConfigHandlerSync } from '../types.ts';\n\nexport const removeDisabledSlices: TransformConfigHandlerSync = <Config extends AnyRecord>(\n clone: Config,\n config: Config,\n) => {\n if ('__disabled' in config) {\n return {\n action: 'DELETE_NODE',\n };\n }\n\n return {\n value: clone,\n };\n};\n","import { castArray, isPlainObject } from 'lodash-es';\nimport { type AnyRecord, type TransformConfigHandler, type TransformConfigHandlerSync } from '../types.ts';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst transformArray = (list: any[], handler: TransformConfigHandler | TransformConfigHandler[]): Promise<any[]> =>\n Promise.all(\n list.map(entry => {\n if (isPlainObject(entry)) {\n return transformConfig(entry, handler);\n }\n\n if (Array.isArray(entry)) {\n return transformArray(entry, handler);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return entry;\n }),\n );\n\nexport const transformConfig = async <Config extends AnyRecord>(\n config: Config,\n handler: TransformConfigHandler | TransformConfigHandler[] = [],\n): Promise<Config> => {\n // Typing gets too complicated without casting.\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n let transform = {} as Config;\n const handlers = castArray(handler);\n\n for (const callback of handlers) {\n const result = await Promise.resolve(callback(transform, config));\n\n if (result.action === 'DELETE_NODE') {\n // Typing gets too complicated without casting.\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n return {} as Config;\n }\n\n if (result.value) {\n transform = result.value;\n }\n\n if (result.action === 'SKIP_NODE') {\n return transform;\n }\n }\n\n for (const key in config) {\n const value = config[key];\n\n if (isPlainObject(value)) {\n transform[key] = await transformConfig(value, handler);\n } else if (Array.isArray(value)) {\n // TODO: Need to look at this\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n transform[key] = (await transformArray(value, handler)) as Config[Extract<keyof Config, string>];\n } else {\n transform[key] = value;\n }\n }\n\n return transform;\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst transformArraySync = (list: any[], handler: TransformConfigHandlerSync | TransformConfigHandlerSync[]): any[] =>\n list.map(entry => {\n if (isPlainObject(entry)) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return transformConfigSync(entry, handler);\n }\n\n if (Array.isArray(entry)) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return transformArraySync(entry, handler);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return entry;\n });\n\nexport const transformConfigSync = <Config extends AnyRecord>(\n config: Config,\n handler: TransformConfigHandlerSync | TransformConfigHandlerSync[] = [],\n): Config => {\n // Typing gets too complicated without casting.\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n let transform = {} as Config;\n const handlers = castArray(handler);\n\n for (const callback of handlers) {\n const result = callback(transform, config);\n\n if (result.action === 'DELETE_NODE') {\n // Typing gets too complicated without casting.\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n return {} as Config;\n }\n\n if (result.value) {\n transform = result.value;\n }\n\n if (result.action === 'SKIP_NODE') {\n return transform;\n }\n }\n\n for (const key in config) {\n // TODO: Need to look at this\n\n const value = config[key];\n\n if (isPlainObject(value)) {\n // TODO: Need to look at this\n\n transform[key] = transformConfigSync(value, handler);\n } else if (Array.isArray(value)) {\n // TODO: Need to look at this\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n transform[key] = transformArraySync(value, handler) as Config[Extract<keyof Config, string>];\n } else {\n // TODO: Need to look at this\n\n transform[key] = value;\n }\n }\n\n return transform;\n};\n","import { outputFileSync } from 'fs-extra/esm';\nimport Handlebars from 'handlebars';\nimport { readFileSync } from 'node:fs';\nimport path from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport shelljs from 'shelljs';\nimport { removeDisabledSlices } from '../transformers/removeDisabledSlices.ts';\nimport { setupExperiments } from '../transformers/setupExperiments.ts';\nimport { type TransformConfigHandler, type WriteConfigOptions } from '../types.ts';\nimport { transformConfig } from './transformConfig.ts';\n\nexport const transformWriteConfig = async <Config extends object>(\n config: Config,\n { experimentsCallback, outputFile }: WriteConfigOptions,\n): Promise<void> => {\n const handlers: TransformConfigHandler[] = [removeDisabledSlices];\n\n if (experimentsCallback) {\n handlers.push(setupExperiments(experimentsCallback));\n }\n\n const dirname = path.dirname(fileURLToPath(import.meta.url));\n\n const template = Handlebars.compile(\n readFileSync(path.resolve(dirname, '../templates/config.ts.hbs'), { encoding: 'utf8' }),\n );\n\n const output = template({\n config: JSON.stringify(\n await transformConfig(config, handlers),\n (_k, v: unknown) => (v === undefined ? 'undefined' : v),\n 2,\n ),\n })\n .replaceAll(/\"([A-Za-z][\\dA-Za-z]+)\":/g, '$1:')\n .replaceAll('\"undefined\"', 'undefined');\n\n shelljs.echo(`zcd watch => writing to file: ${outputFile}`);\n shelljs.echo(`zcd watch => content to write:\\n${output}\\n`);\n outputFileSync(path.resolve(process.cwd(), outputFile), output);\n};\n","import { type AnyRecord, type SetupExperimentsCallback, type TransformConfigHandler } from '../types.ts';\n\nexport const setupExperiments =\n (callback: SetupExperimentsCallback): TransformConfigHandler =>\n async <Config extends AnyRecord>(clone: Config, config: Config) => {\n if ('__experiment' in config && typeof config.__experiment === 'string') {\n const buckets = await callback(config.__experiment, clone, config);\n\n // @ts-expect-error private property\n clone.__experiment = {\n buckets,\n id: config.__experiment,\n };\n\n return {\n value: clone,\n };\n }\n\n return {\n value: clone,\n };\n };\n","import { resolve } from 'node:path';\nimport shelljs from 'shelljs';\nimport { type CliCommands } from '../cli.ts';\nimport { type ConfigBuilder } from '../createConfigBuilder.ts';\nimport { type SetupExperimentsCallback } from '../types.ts';\nimport { transformWriteConfig } from './transformWriteConfig.ts';\n\nexport const importValidateTransformWriteConfig = (\n inputFile: string,\n outputFile: string,\n command: CliCommands,\n experimentCallbackFile?: string,\n): void => {\n import(resolve(process.cwd(), inputFile))\n // TODO: Will revisit\n // eslint-disable-next-line unicorn/prefer-await\n .then(({ default: configBuilder }: { default: ConfigBuilder<object> }) => {\n if (!configBuilder.$validate()) {\n shelljs.echo(`zcd ${command} => invalid config`);\n shelljs.echo(`zcd ${command} => config values:\\n${configBuilder.$toJson()}\\n`);\n shelljs.echo(`zcd ${command} => errors:\\n${JSON.stringify(configBuilder.$errors(), undefined, 2)}\\n`);\n shelljs.exit(1);\n }\n\n shelljs.echo('zcd ${command} => valid config');\n shelljs.echo(`zcd ${command} => config values:\\n${configBuilder.$toJson()}\\n`);\n\n if (experimentCallbackFile) {\n import(resolve(process.cwd(), experimentCallbackFile))\n // TODO: Will revisit\n // eslint-disable-next-line unicorn/prefer-await\n .then(({ default: experimentsCallback }: { default: SetupExperimentsCallback }) => {\n void transformWriteConfig(configBuilder.$values(), { experimentsCallback, outputFile });\n })\n // TODO: Will revisit\n // eslint-disable-next-line unicorn/prefer-await\n .catch((error: unknown) => {\n if (!(error instanceof Error)) {\n return;\n }\n\n shelljs.echo(`zcd ${command} => error message: ${error.message}`);\n\n if (error.stack) {\n shelljs.echo(`zcd ${command} => error stack:\\n${error.stack}\\n`);\n }\n });\n\n return;\n }\n\n void transformWriteConfig(configBuilder.$values(), { outputFile });\n })\n // TODO: Will revisit\n // eslint-disable-next-line unicorn/prefer-await\n .catch((error: unknown) => {\n if (!(error instanceof Error)) {\n return;\n }\n\n shelljs.echo(`zcd ${command} => error message: ${error.message}`);\n\n if (error.stack) {\n shelljs.echo(`zcd ${command} => error stack:\\n${error.stack}\\n`);\n }\n });\n};\n","import { watchFile } from 'node:fs';\nimport { resolve } from 'node:path';\nimport shelljs from 'shelljs';\nimport yargs, { type Argv } from 'yargs';\nimport { hideBin } from 'yargs/helpers';\nimport { importValidateTransformWriteConfig } from './utils/importValidateTransformWriteConfig.ts';\n\nexport type CliCommands = 'build' | 'watch';\n\nexport type CliArguments = Argv<{\n 'experiments-callback-file'?: string;\n 'input-file': string;\n 'output-file': string;\n}>;\n\nconst generateArguments = (cmdYargs: Argv): CliArguments =>\n cmdYargs\n .positional('input-file', {\n demandOption: true,\n desc: 'The relative path to the config builder root file',\n type: 'string',\n })\n .positional('output-file', {\n demandOption: true,\n desc: 'The relative path to the output config file',\n type: 'string',\n })\n .option('experiments-callback-file', {\n desc: 'The relative path to the experiment callback file',\n type: 'string',\n });\n\nexport const cli = (): void => {\n // yargs does not provide a way to pass generic to type args.\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n const argv = yargs(hideBin(process.argv)) as Argv<{\n 'experiments-callback-file'?: string;\n 'input-file': string;\n 'output-file': string;\n }>;\n\n void argv\n .command(\n 'watch <input-file> <output-file>',\n 'Watch a config builder and write config',\n cmdYargs => generateArguments(cmdYargs),\n cmdYargs => {\n shelljs.echo(`zcd watch => watching file: ${cmdYargs['input-file']}`);\n\n watchFile(resolve(process.cwd(), cmdYargs['input-file']), () => {\n shelljs.echo('zcd watch => file change detected');\n\n importValidateTransformWriteConfig(\n cmdYargs['input-file'],\n cmdYargs['output-file'],\n 'watch',\n cmdYargs['experiments-callback-file'],\n );\n });\n },\n )\n .command(\n 'build <input-file> <output-file>',\n 'Write config from a config builder',\n cmdYargs => generateArguments(cmdYargs),\n cmdYargs => {\n shelljs.echo(`zcd build => building file: ${cmdYargs['input-file']}`);\n\n importValidateTransformWriteConfig(\n cmdYargs['input-file'],\n cmdYargs['output-file'],\n 'build',\n cmdYargs['experiments-callback-file'],\n );\n },\n )\n .help()\n .parseAsync();\n};\n"],"names":["removeDisabledSlices","clone","config","action","value","transformArray","list","handler","Promise","all","map","entry","isPlainObject","transformConfig","Array","isArray","async","transform","handlers","castArray","callback","result","resolve","key","transformWriteConfig","experimentsCallback","outputFile","push","__experiment","buckets","id","dirname","path","fileURLToPath","url","output","Handlebars","compile","readFileSync","encoding","template","JSON","stringify","_k","v","undefined","replaceAll","shelljs","echo","outputFileSync","process","cwd","importValidateTransformWriteConfig","inputFile","command","experimentCallbackFile","then","default","configBuilder","$validate","$toJson","$errors","exit","$values","catch","error","Error","message","stack","generateArguments","cmdYargs","positional","demandOption","desc","type","option","cli","yargs","hideBin","argv","watchFile","help","parseAsync"],"mappings":"2VAEO,MAAMA,EAAmD,CAC9DC,EACAC,IAEI,eAAgBA,EACX,CACLC,OAAQ,eAIL,CACLC,MAAOH,GCTLI,EAAiB,CAACC,EAAaC,IACnCC,QAAQC,IACNH,EAAKI,IAAIC,GACHC,EAAcD,GACTE,EAAgBF,EAAOJ,GAG5BO,MAAMC,QAAQJ,GACTN,EAAeM,EAAOJ,GAIxBI,IAIAE,EAAkBG,MAC7Bd,EACAK,EAA6D,MAI7D,IAAIU,EAAY,CAAA,EAChB,MAAMC,EAAWC,EAAUZ,GAE3B,IAAK,MAAMa,KAAYF,EAAU,CAC/B,MAAMG,QAAeb,QAAQc,QAAQF,EAASH,EAAWf,IAEzD,GAAsB,gBAAlBmB,EAAOlB,OAGT,MAAO,CAAA,EAOT,GAJIkB,EAAOjB,QACTa,EAAYI,EAAOjB,OAGC,cAAlBiB,EAAOlB,OACT,OAAOc,CAEX,CAEA,IAAK,MAAMM,KAAOrB,EAAQ,CACxB,MAAME,EAAQF,EAAOqB,GAEjBX,EAAcR,GAChBa,EAAUM,SAAaV,EAAgBT,EAAOG,GACrCO,MAAMC,QAAQX,GAGvBa,EAAUM,SAAclB,EAAeD,EAAOG,GAE9CU,EAAUM,GAAOnB,CAErB,CAEA,OAAOa,GClDIO,EAAuBR,MAClCd,GACEuB,sBAAqBC,iBAEvB,MAAMR,EAAqC,CAAClB,GCZ5C,IAACoB,EDcGK,GACFP,EAASS,MCfVP,EDegCK,ECdjCT,MAAiCf,EAAeC,KAC9C,GAAI,iBAAkBA,GAAyC,iBAAxBA,EAAO0B,aAA2B,CACvE,MAAMC,QAAgBT,EAASlB,EAAO0B,aAAc3B,EAAOC,GAQ3D,OALAD,EAAM2B,aAAe,CACnBC,UACAC,GAAI5B,EAAO0B,cAGN,CACLxB,MAAOH,EAEX,CAEA,MAAO,CACLG,MAAOH,MDCX,MAAM8B,EAAUC,EAAKD,QAAQE,cAA0BC,MAMjDC,EAJWC,EAAWC,QAC1BC,EAAaN,EAAKV,QAAQS,EAAS,8BAA+B,CAAEQ,SAAU,SAGjEC,CAAS,CACtBtC,OAAQuC,KAAKC,gBACL7B,EAAgBX,EAAQgB,GAC9B,CAACyB,EAAIC,SAAsBC,IAAND,EAAkB,YAAcA,EACrD,KAGDE,WAAW,4BAA6B,OACxCA,WAAW,cAAe,aAE7BC,EAAQC,KAAK,iCAAiCtB,KAC9CqB,EAAQC,KAAK,mCAAmCb,OAChDc,EAAejB,EAAKV,QAAQ4B,QAAQC,MAAOzB,GAAaS,IEhC7CiB,EAAqC,CAChDC,EACA3B,EACA4B,EACAC,YAEOjC,EAAQ4B,QAAQC,MAAOE,IAG3BG,KAAK,EAAGC,QAASC,MACXA,EAAcC,cACjBZ,EAAQC,KAAK,OAAOM,uBACpBP,EAAQC,KAAK,OAAOM,wBAA8BI,EAAcE,eAChEb,EAAQC,KAAK,OAAOM,iBAAuBb,KAAKC,UAAUgB,EAAcG,eAAWhB,EAAW,QAC9FE,EAAQe,KAAK,IAGff,EAAQC,KAAK,kCACbD,EAAQC,KAAK,OAAOM,wBAA8BI,EAAcE,eAE5DL,SACKjC,EAAQ4B,QAAQC,MAAOI,IAG3BC,KAAK,EAAGC,QAAShC,MACXD,EAAqBkC,EAAcK,UAAW,CAAEtC,sBAAqBC,iBAI3EsC,MAAOC,IACAA,aAAiBC,QAIvBnB,EAAQC,KAAK,OAAOM,uBAA6BW,EAAME,WAEnDF,EAAMG,OACRrB,EAAQC,KAAK,OAAOM,sBAA4BW,EAAMG,cAOzD5C,EAAqBkC,EAAcK,UAAW,CAAErC,iBAItDsC,MAAOC,IACAA,aAAiBC,QAIvBnB,EAAQC,KAAK,OAAOM,uBAA6BW,EAAME,WAEnDF,EAAMG,OACRrB,EAAQC,KAAK,OAAOM,sBAA4BW,EAAMG,eChDxDC,EAAqBC,GACzBA,EACGC,WAAW,aAAc,CACxBC,cAAc,EACdC,KAAM,oDACNC,KAAM,WAEPH,WAAW,cAAe,CACzBC,cAAc,EACdC,KAAM,8CACNC,KAAM,WAEPC,OAAO,4BAA6B,CACnCF,KAAM,oDACNC,KAAM,WAGCE,EAAM,KAGJC,EAAMC,EAAQ5B,QAAQ6B,OAOhCzB,QACC,mCACA,0CACAgB,GAAYD,EAAkBC,GAC9BA,IACEvB,EAAQC,KAAK,+BAA+BsB,EAAS,iBAErDU,EAAU1D,EAAQ4B,QAAQC,MAAOmB,EAAS,eAAgB,KACxDvB,EAAQC,KAAK,qCAEbI,EACEkB,EAAS,cACTA,EAAS,eACT,QACAA,EAAS,kCAKhBhB,QACC,mCACA,qCACAgB,GAAYD,EAAkBC,GAC9BA,IACEvB,EAAQC,KAAK,+BAA+BsB,EAAS,iBAErDlB,EACEkB,EAAS,cACTA,EAAS,eACT,QACAA,EAAS,gCAIdW,OACAC"}
@@ -1,49 +1,49 @@
1
1
  -----------------------------
2
2
  Rollup File Analysis
3
3
  -----------------------------
4
- bundle size: 7.348 KB
4
+ bundle size: 7.035 KB
5
5
  original size: 11.406 KB
6
- code reduction: 35.58 %
6
+ code reduction: 38.32 %
7
7
  module count: 6
8
8
 
9
- ██████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
9
+ ███████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
10
10
  file: /src/utils/importValidateTransformWriteConfig.ts
11
- bundle space: 29.03 %
12
- rendered size: 2.133 KB
11
+ bundle space: 30.18 %
12
+ rendered size: 2.123 KB
13
13
  original size: 2.453 KB
14
- code reduction: 13.05 %
14
+ code reduction: 13.45 %
15
15
  dependents: 1
16
16
  - /src/cli.ts
17
17
 
18
- ███████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
18
+ ████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
19
19
  file: /src/utils/transformConfig.ts
20
- bundle space: 23.37 %
21
- rendered size: 1.717 KB
20
+ bundle space: 24.02 %
21
+ rendered size: 1.69 KB
22
22
  original size: 4.004 KB
23
- code reduction: 57.12 %
23
+ code reduction: 57.79 %
24
24
  dependents: 1
25
25
  - /src/utils/transformWriteConfig.ts
26
26
 
27
27
  ███████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
28
28
  file: /src/cli.ts
29
- bundle space: 22.22 %
30
- rendered size: 1.633 KB
29
+ bundle space: 22.91 %
30
+ rendered size: 1.612 KB
31
31
  original size: 2.42 KB
32
- code reduction: 32.52 %
32
+ code reduction: 33.39 %
33
33
  dependents: 0
34
34
 
35
- ███████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
35
+ ██████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
36
36
  file: /src/utils/transformWriteConfig.ts
37
- bundle space: 15.64 %
38
- rendered size: 1.149 KB
37
+ bundle space: 12.71 %
38
+ rendered size: 894 Bytes
39
39
  original size: 1.532 KB
40
- code reduction: 25 %
40
+ code reduction: 41.64 %
41
41
  dependents: 1
42
42
  - /src/utils/importValidateTransformWriteConfig.ts
43
43
 
44
44
  ███░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
45
45
  file: /src/transformers/setupExperiments.ts
46
- bundle space: 7.12 %
46
+ bundle space: 7.43 %
47
47
  rendered size: 523 Bytes
48
48
  original size: 660 Bytes
49
49
  code reduction: 20.76 %
@@ -52,7 +52,7 @@ dependents: 1
52
52
 
53
53
  █░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
54
54
  file: /src/transformers/removeDisabledSlices.ts
55
- bundle space: 2.63 %
55
+ bundle space: 2.74 %
56
56
  rendered size: 193 Bytes
57
57
  original size: 337 Bytes
58
58
  code reduction: 42.73 %