@c15t/cli 1.3.3 → 1.4.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.
@@ -1,5 +1,6 @@
1
1
  import type { CliLogger } from '../utils/logger';
2
2
  export type PackageManager = 'npm' | 'yarn' | 'pnpm';
3
+ export declare const SUPPORTED_PACKAGE_MANAGERS: PackageManager[];
3
4
  export interface PackageManagerResult {
4
5
  name: PackageManager;
5
6
  version: string | null;
@@ -1 +1 @@
1
- {"version":3,"file":"package-manager-detection.d.ts","sourceRoot":"","sources":["../../src/context/package-manager-detection.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,CAAC;AAErD,MAAM,WAAW,oBAAoB;IACpC,IAAI,EAAE,cAAc,CAAC;IACrB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AA0ID;;;;;;GAMG;AACH,wBAAsB,oBAAoB,CACzC,WAAW,EAAE,MAAM,EACnB,MAAM,CAAC,EAAE,SAAS,GAChB,OAAO,CAAC,oBAAoB,CAAC,CAyC/B"}
1
+ {"version":3,"file":"package-manager-detection.d.ts","sourceRoot":"","sources":["../../src/context/package-manager-detection.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,CAAC;AACrD,eAAO,MAAM,0BAA0B,EAAE,cAAc,EAItD,CAAC;AACF,MAAM,WAAW,oBAAoB;IACpC,IAAI,EAAE,cAAc,CAAC;IACrB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AAoBD;;;;;;GAMG;AACH,wBAAsB,oBAAoB,CACzC,WAAW,EAAE,MAAM,EACnB,MAAM,CAAC,EAAE,SAAS,GAChB,OAAO,CAAC,oBAAoB,CAAC,CAqD/B"}
package/dist/index.mjs CHANGED
@@ -18,6 +18,7 @@ import * as __WEBPACK_EXTERNAL_MODULE__c15t_backend_pkgs_db_adapters_cee37d0f__
18
18
  import * as __WEBPACK_EXTERNAL_MODULE__c15t_backend_pkgs_migrations_80b6e3bd__ from "@c15t/backend/pkgs/migrations";
19
19
  import * as __WEBPACK_EXTERNAL_MODULE_figlet__ from "figlet";
20
20
  import * as __WEBPACK_EXTERNAL_MODULE_fs_extra_ce68a66b__ from "fs-extra";
21
+ import * as __WEBPACK_EXTERNAL_MODULE_package_manager_detector_detect_94d6a9ae__ from "package-manager-detector/detect";
21
22
  function isC15TOptions(obj) {
22
23
  return 'object' == typeof obj && null !== obj && 'appName' in obj;
23
24
  }
@@ -331,114 +332,6 @@ async function detectProjectRoot(cwd, logger) {
331
332
  return cwd;
332
333
  }
333
334
  }
334
- async function isValidProjectRoot(dir) {
335
- try {
336
- await __WEBPACK_EXTERNAL_MODULE_node_fs_promises_153e37e0__["default"].access(__WEBPACK_EXTERNAL_MODULE_node_path_c5b9b54f__["default"].join(dir, 'package.json'));
337
- const files = await __WEBPACK_EXTERNAL_MODULE_node_fs_promises_153e37e0__["default"].readdir(dir);
338
- return files.some((file)=>'node_modules' === file || 'package-lock.json' === file || 'yarn.lock' === file || 'pnpm-lock.yaml' === file);
339
- } catch {
340
- return false;
341
- }
342
- }
343
- async function detectPackageManagerInDirectory(dir, files, logger) {
344
- if (files.includes('pnpm-workspace.yaml')) {
345
- logger?.debug('Found pnpm workspace configuration');
346
- return {
347
- name: 'pnpm',
348
- version: await getPackageManagerVersion('pnpm')
349
- };
350
- }
351
- if (files.includes('yarn.lock') && await isValidProjectRoot(dir)) {
352
- logger?.debug('Found yarn.lock at root level');
353
- return {
354
- name: 'yarn',
355
- version: await getPackageManagerVersion('yarn')
356
- };
357
- }
358
- if (files.includes('package-lock.json') && await isValidProjectRoot(dir)) {
359
- logger?.debug('Found package-lock.json at root level');
360
- return {
361
- name: 'npm',
362
- version: await getPackageManagerVersion('npm')
363
- };
364
- }
365
- return null;
366
- }
367
- async function findPackageManager(startDir, logger) {
368
- logger?.debug(`Checking for package manager starting from ${startDir}`);
369
- if (!await isValidProjectRoot(startDir)) {
370
- logger?.debug(`${startDir} is not a valid project root, skipping detection`);
371
- return null;
372
- }
373
- let currentDir = startDir;
374
- let depth = 0;
375
- const maxDepth = 4;
376
- while(depth < maxDepth)try {
377
- logger?.debug(`Checking directory ${currentDir} for package manager files`);
378
- const files = await __WEBPACK_EXTERNAL_MODULE_node_fs_promises_153e37e0__["default"].readdir(currentDir);
379
- const packageManager = await detectPackageManagerInDirectory(currentDir, files, logger);
380
- if (packageManager) return packageManager;
381
- const parentDir = __WEBPACK_EXTERNAL_MODULE_node_path_c5b9b54f__["default"].dirname(currentDir);
382
- if (parentDir === currentDir) break;
383
- currentDir = parentDir;
384
- depth++;
385
- } catch (error) {
386
- logger?.debug(`Error checking directory ${currentDir}: ${error instanceof Error ? error.message : String(error)}`);
387
- break;
388
- }
389
- logger?.debug('No package manager found');
390
- return null;
391
- }
392
- async function getPackageManagerVersion(pm) {
393
- try {
394
- const { execSync } = await import("node:child_process");
395
- const version = execSync(`${pm} --version`).toString().trim();
396
- return version;
397
- } catch {
398
- return null;
399
- }
400
- }
401
- async function detectPackageManager(projectRoot, logger) {
402
- try {
403
- logger?.debug(`Detecting package manager in ${projectRoot}`);
404
- const packageManager = await findPackageManager(projectRoot, logger);
405
- if (packageManager) {
406
- logger?.debug(`Detected package manager: ${packageManager.name}`);
407
- return packageManager;
408
- }
409
- } catch (error) {
410
- logger?.error(`Error detecting package manager: ${error instanceof Error ? error.message : String(error)}`);
411
- }
412
- const selectedPackageManager = await __WEBPACK_EXTERNAL_MODULE__clack_prompts_3cae1695__.select({
413
- message: 'Please select your package manager:',
414
- options: [
415
- {
416
- value: 'npm',
417
- label: 'npm'
418
- },
419
- {
420
- value: 'yarn',
421
- label: 'yarn'
422
- },
423
- {
424
- value: 'pnpm',
425
- label: 'pnpm'
426
- }
427
- ],
428
- initialValue: 'npm'
429
- });
430
- if (__WEBPACK_EXTERNAL_MODULE__clack_prompts_3cae1695__.isCancel(selectedPackageManager)) {
431
- logger?.debug('Package manager selection cancelled by user');
432
- logger?.failed('Package manager selection cancelled. Exiting.');
433
- process.exit(0);
434
- }
435
- const version = await getPackageManagerVersion(selectedPackageManager);
436
- logger?.debug(`User selected package manager: ${selectedPackageManager} (version: ${version ?? 'unknown'})`);
437
- return {
438
- name: selectedPackageManager,
439
- version
440
- };
441
- }
442
335
  const TELEMETRY_DISABLED_ENV = 'C15T_TELEMETRY_DISABLED';
443
336
  const TelemetryEventName = {
444
337
  CLI_INVOKED: 'cli.invoked',
@@ -799,6 +692,8 @@ export const c15tConfig = {
799
692
  // Using hosted c15t (consent.io) or self-hosted instance
800
693
  mode: 'c15t',
801
694
  backendURL: ${useEnvFile ? 'process.env.NEXT_PUBLIC_C15T_URL' : `'${backendURL || 'https://your-instance.c15t.dev'}'`},
695
+ consentCategories: ['necessary', 'marketing'], // Optional: Specify which consent categories to show in the banner.
696
+ ignoreGeoLocation: true, // Useful for development to always view the banner.
802
697
 
803
698
  // Optional: Add callback functions for various events
804
699
  callbacks: {
@@ -910,14 +805,20 @@ function generateOptionsText(mode, backendURL, useEnvFile, proxyNextjs) {
910
805
  if (proxyNextjs) return `{
911
806
  mode: 'c15t',
912
807
  backendURL: '/api/c15t',
808
+ consentCategories: ['necessary', 'marketing'], // Optional: Specify which consent categories to show in the banner.
809
+ ignoreGeoLocation: true, // Useful for development to always view the banner.
913
810
  }`;
914
811
  if (useEnvFile) return `{
915
812
  mode: 'c15t',
916
813
  backendURL: process.env.NEXT_PUBLIC_C15T_URL!,
814
+ consentCategories: ['necessary', 'marketing'], // Optional: Specify which consent categories to show in the banner.
815
+ ignoreGeoLocation: true, // Useful for development to always view the banner.
917
816
  }`;
918
817
  return `{
919
818
  mode: 'c15t',
920
819
  backendURL: '${backendURL || 'https://your-instance.c15t.dev'}',
820
+ consentCategories: ['necessary', 'marketing'], // Optional: Specify which consent categories to show in the banner.
821
+ ignoreGeoLocation: true, // Useful for development to always view the banner.
921
822
  }`;
922
823
  case 'custom':
923
824
  return `{
@@ -927,6 +828,7 @@ function generateOptionsText(mode, backendURL, useEnvFile, proxyNextjs) {
927
828
  default:
928
829
  return `{
929
830
  mode: 'offline',
831
+ consentCategories: ['necessary', 'marketing'], // Optional: Specify which consent categories to show in the banner.
930
832
  }`;
931
833
  }
932
834
  }
@@ -1083,9 +985,8 @@ function generateRewriteDestination(backendURL, useEnvFile) {
1083
985
  }
1084
986
  function createNewNextConfig(backendURL, useEnvFile) {
1085
987
  const { destination, isTemplateLiteral } = generateRewriteDestination(backendURL, useEnvFile);
1086
- const envImport = useEnvFile ? "import './src/env';\n\n" : '';
1087
988
  const destinationValue = isTemplateLiteral ? `\`${destination}\`` : `'${destination}'`;
1088
- return `${envImport}import type { NextConfig } from 'next';
989
+ return `import type { NextConfig } from 'next';
1089
990
 
1090
991
  const config: NextConfig = {
1091
992
  async rewrites() {
@@ -1110,7 +1011,6 @@ function createRewriteRule(destination, isTemplateLiteral) {
1110
1011
  }
1111
1012
  function updateExistingConfig(configFile, backendURL, useEnvFile) {
1112
1013
  const { destination, isTemplateLiteral } = generateRewriteDestination(backendURL, useEnvFile);
1113
- if (useEnvFile && !configFile.getFullText().includes("import './src/env'")) configFile.insertText(0, "import './src/env';\n");
1114
1014
  const configObject = findConfigObject(configFile);
1115
1015
  if (!configObject) return false;
1116
1016
  const rewritesProperty = configObject.getProperty('rewrites');
@@ -1630,10 +1530,9 @@ async function startOnboarding(context, existingConfig) {
1630
1530
  }
1631
1531
  }
1632
1532
  async function performOnboarding(context, existingConfig, handleCancel) {
1633
- const { telemetry, logger } = context;
1533
+ const { telemetry, logger, packageManager } = context;
1634
1534
  const isUpdate = !!existingConfig;
1635
1535
  const projectRoot = await detectProjectRoot(context.cwd, logger);
1636
- const packageManager = await detectPackageManager(projectRoot, logger);
1637
1536
  const { pkg } = await detectFramework(projectRoot, logger);
1638
1537
  if (!pkg) throw new Error('Error detecting framework');
1639
1538
  const storageMode = await handleStorageModeSelection(context, handleCancel, existingConfig);
@@ -2375,6 +2274,66 @@ function createFileSystem(context) {
2375
2274
  }
2376
2275
  };
2377
2276
  }
2277
+ const SUPPORTED_PACKAGE_MANAGERS = [
2278
+ 'npm',
2279
+ 'yarn',
2280
+ 'pnpm'
2281
+ ];
2282
+ async function getPackageManagerVersion(pm) {
2283
+ try {
2284
+ const { execSync } = await import("node:child_process");
2285
+ const version = execSync(`${pm} --version`).toString().trim();
2286
+ return version;
2287
+ } catch {
2288
+ return null;
2289
+ }
2290
+ }
2291
+ async function detectPackageManager(projectRoot, logger) {
2292
+ try {
2293
+ logger?.debug('Detecting package manager');
2294
+ const pm = await (0, __WEBPACK_EXTERNAL_MODULE_package_manager_detector_detect_94d6a9ae__.detect)({
2295
+ cwd: projectRoot
2296
+ });
2297
+ if (!pm) throw new Error('No package manager detected');
2298
+ logger?.debug(`Detected package manager: ${pm.name}`);
2299
+ if (!SUPPORTED_PACKAGE_MANAGERS.includes(pm.name)) throw new Error(`Unsupported package manager: ${pm.name}`);
2300
+ return {
2301
+ name: pm.name,
2302
+ version: pm.version ?? null
2303
+ };
2304
+ } catch (error) {
2305
+ logger?.error(`Error detecting package manager: ${error instanceof Error ? error.message : String(error)}`);
2306
+ }
2307
+ const selectedPackageManager = await __WEBPACK_EXTERNAL_MODULE__clack_prompts_3cae1695__.select({
2308
+ message: 'Please select your package manager:',
2309
+ options: [
2310
+ {
2311
+ value: 'npm',
2312
+ label: 'npm'
2313
+ },
2314
+ {
2315
+ value: 'yarn',
2316
+ label: 'yarn'
2317
+ },
2318
+ {
2319
+ value: 'pnpm',
2320
+ label: 'pnpm'
2321
+ }
2322
+ ],
2323
+ initialValue: 'npm'
2324
+ });
2325
+ if (__WEBPACK_EXTERNAL_MODULE__clack_prompts_3cae1695__.isCancel(selectedPackageManager)) {
2326
+ logger?.debug('Package manager selection cancelled by user');
2327
+ logger?.failed('Package manager selection cancelled. Exiting.');
2328
+ process.exit(0);
2329
+ }
2330
+ const version = await getPackageManagerVersion(selectedPackageManager);
2331
+ logger?.debug(`User selected package manager: ${selectedPackageManager} (version: ${version ?? 'unknown'})`);
2332
+ return {
2333
+ name: selectedPackageManager,
2334
+ version
2335
+ };
2336
+ }
2378
2337
  const globalFlags = [
2379
2338
  {
2380
2339
  names: [
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/onboarding/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAczD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAiBnD;;;;;GAKG;AACH,wBAAsB,eAAe,CACpC,OAAO,EAAE,UAAU,EACnB,cAAc,CAAC,EAAE,WAAW,GAAG,qBAAqB,GAAG,IAAI,iBA6C3D"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/onboarding/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAWzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAiBnD;;;;;GAKG;AACH,wBAAsB,eAAe,CACpC,OAAO,EAAE,UAAU,EACnB,cAAc,CAAC,EAAE,WAAW,GAAG,qBAAqB,GAAG,IAAI,iBA6C3D"}
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/onboarding/templates/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD;;;;;;;;GAQG;AACH,wBAAgB,2BAA2B,CAC1C,IAAI,EAAE,MAAM,EACZ,UAAU,CAAC,EAAE,MAAM,EACnB,UAAU,CAAC,EAAE,OAAO,EACpB,MAAM,CAAC,EAAE,SAAS,GAChB,MAAM,CA+FR"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/onboarding/templates/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD;;;;;;;;GAQG;AACH,wBAAgB,2BAA2B,CAC1C,IAAI,EAAE,MAAM,EACZ,UAAU,CAAC,EAAE,MAAM,EACnB,UAAU,CAAC,EAAE,OAAO,EACpB,MAAM,CAAC,EAAE,SAAS,GAChB,MAAM,CAiGR"}
@@ -1 +1 @@
1
- {"version":3,"file":"layout.d.ts","sourceRoot":"","sources":["../../../src/onboarding/templates/layout.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAOvE,UAAU,wBAAwB;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,GAAG,EAAE,iBAAiB,CAAC;IACvB,WAAW,CAAC,EAAE,OAAO,CAAC;CACtB;AAkKD;;;;;;;;GAQG;AACH,wBAAsB,iBAAiB,CAAC,EACvC,WAAW,EACX,IAAI,EACJ,GAAG,EACH,UAAU,EACV,UAAU,EACV,WAAW,GACX,EAAE,wBAAwB,GAAG,OAAO,CAAC;IACrC,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,eAAe,EAAE,OAAO,CAAC;CACzB,CAAC,CA2DD"}
1
+ {"version":3,"file":"layout.d.ts","sourceRoot":"","sources":["../../../src/onboarding/templates/layout.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAOvE,UAAU,wBAAwB;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,GAAG,EAAE,iBAAiB,CAAC;IACvB,WAAW,CAAC,EAAE,OAAO,CAAC;CACtB;AAyKD;;;;;;;;GAQG;AACH,wBAAsB,iBAAiB,CAAC,EACvC,WAAW,EACX,IAAI,EACJ,GAAG,EACH,UAAU,EACV,UAAU,EACV,WAAW,GACX,EAAE,wBAAwB,GAAG,OAAO,CAAC;IACrC,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,eAAe,EAAE,OAAO,CAAC;CACzB,CAAC,CA2DD"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@c15t/cli",
3
- "version": "1.3.3",
3
+ "version": "1.4.0",
4
4
  "description": "The CLI for c15t",
5
5
  "type": "module",
6
6
  "exports": "./dist/index.mjs",
@@ -24,13 +24,13 @@
24
24
  "fs-extra": "^11.3.0",
25
25
  "jiti": "^2.4.2",
26
26
  "open": "^10.1.1",
27
- "package-manager-detector": "^1.2.0",
27
+ "package-manager-detector": "^1.3.0",
28
28
  "picocolors": "^1.1.1",
29
29
  "posthog-node": "^4.11.7",
30
30
  "ts-morph": "^25.0.1",
31
31
  "zod": "^3.24.2",
32
32
  "@c15t/backend": "1.3.1",
33
- "@c15t/react": "1.3.3"
33
+ "@c15t/react": "1.4.0"
34
34
  },
35
35
  "devDependencies": {
36
36
  "@types/figlet": "^1.7.0",