@qr-styled/node 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +691 -0
  3. package/dist/cli/index.d.ts +29 -0
  4. package/dist/cli/index.d.ts.map +1 -0
  5. package/dist/cli/index.js +126 -0
  6. package/dist/cli/index.js.map +1 -0
  7. package/dist/index.d.ts +15 -0
  8. package/dist/index.d.ts.map +1 -0
  9. package/dist/index.js +14 -0
  10. package/dist/index.js.map +1 -0
  11. package/dist/lib/QRGenerator.d.ts +53 -0
  12. package/dist/lib/QRGenerator.d.ts.map +1 -0
  13. package/dist/lib/QRGenerator.js +150 -0
  14. package/dist/lib/QRGenerator.js.map +1 -0
  15. package/dist/lib/QRGenerator.new-features.test.d.ts +2 -0
  16. package/dist/lib/QRGenerator.new-features.test.d.ts.map +1 -0
  17. package/dist/lib/QRGenerator.new-features.test.js +235 -0
  18. package/dist/lib/QRGenerator.new-features.test.js.map +1 -0
  19. package/dist/lib/QRGenerator.test.d.ts +2 -0
  20. package/dist/lib/QRGenerator.test.d.ts.map +1 -0
  21. package/dist/lib/QRGenerator.test.js +39 -0
  22. package/dist/lib/QRGenerator.test.js.map +1 -0
  23. package/dist/lib/renderers/BackgroundRenderer.d.ts +23 -0
  24. package/dist/lib/renderers/BackgroundRenderer.d.ts.map +1 -0
  25. package/dist/lib/renderers/BackgroundRenderer.js +48 -0
  26. package/dist/lib/renderers/BackgroundRenderer.js.map +1 -0
  27. package/dist/lib/renderers/GradientRenderer.d.ts +19 -0
  28. package/dist/lib/renderers/GradientRenderer.d.ts.map +1 -0
  29. package/dist/lib/renderers/GradientRenderer.js +44 -0
  30. package/dist/lib/renderers/GradientRenderer.js.map +1 -0
  31. package/dist/lib/renderers/LogoRenderer.d.ts +23 -0
  32. package/dist/lib/renderers/LogoRenderer.d.ts.map +1 -0
  33. package/dist/lib/renderers/LogoRenderer.js +72 -0
  34. package/dist/lib/renderers/LogoRenderer.js.map +1 -0
  35. package/dist/lib/renderers/ModuleRenderer.d.ts +45 -0
  36. package/dist/lib/renderers/ModuleRenderer.d.ts.map +1 -0
  37. package/dist/lib/renderers/ModuleRenderer.js +162 -0
  38. package/dist/lib/renderers/ModuleRenderer.js.map +1 -0
  39. package/dist/lib/renderers/SVGRenderer.d.ts +23 -0
  40. package/dist/lib/renderers/SVGRenderer.d.ts.map +1 -0
  41. package/dist/lib/renderers/SVGRenderer.js +74 -0
  42. package/dist/lib/renderers/SVGRenderer.js.map +1 -0
  43. package/dist/lib/utils/formatters.d.ts +26 -0
  44. package/dist/lib/utils/formatters.d.ts.map +1 -0
  45. package/dist/lib/utils/formatters.js +107 -0
  46. package/dist/lib/utils/formatters.js.map +1 -0
  47. package/dist/lib/utils/formatters.test.d.ts +2 -0
  48. package/dist/lib/utils/formatters.test.d.ts.map +1 -0
  49. package/dist/lib/utils/formatters.test.js +190 -0
  50. package/dist/lib/utils/formatters.test.js.map +1 -0
  51. package/dist/lib/utils/types.d.ts +120 -0
  52. package/dist/lib/utils/types.d.ts.map +1 -0
  53. package/dist/lib/utils/types.js +35 -0
  54. package/dist/lib/utils/types.js.map +1 -0
  55. package/dist/lib/utils/validators.d.ts +11 -0
  56. package/dist/lib/utils/validators.d.ts.map +1 -0
  57. package/dist/lib/utils/validators.js +127 -0
  58. package/dist/lib/utils/validators.js.map +1 -0
  59. package/dist/lib/utils/validators.test.d.ts +2 -0
  60. package/dist/lib/utils/validators.test.d.ts.map +1 -0
  61. package/dist/lib/utils/validators.test.js +62 -0
  62. package/dist/lib/utils/validators.test.js.map +1 -0
  63. package/package.json +87 -0
@@ -0,0 +1,127 @@
1
+ import { VALID_LOGO_SHAPES, VALID_ERROR_CORRECTION_LEVELS } from './types.js';
2
+ /**
3
+ * Validates QR generation options
4
+ * @throws {Error} If options are invalid
5
+ */
6
+ export function validateOptions(options) {
7
+ // Validate that either url or data is provided
8
+ if (!options.url && !options.data) {
9
+ throw new Error('URL, text content, or structured data is required');
10
+ }
11
+ // Validate specialized data types
12
+ if (options.type &&
13
+ options.type !== 'url' &&
14
+ options.type !== 'text' &&
15
+ !options.data) {
16
+ throw new Error(`Structured data is required for type '${options.type}'`);
17
+ }
18
+ if (options.size && (options.size < 100 || options.size > 5000)) {
19
+ throw new Error('Size must be between 100 and 5000 pixels');
20
+ }
21
+ if (options.margin !== undefined &&
22
+ (options.margin < 0 || options.margin > 10)) {
23
+ throw new Error('Margin must be between 0 and 10 modules');
24
+ }
25
+ if (options.moduleRadius !== undefined &&
26
+ (options.moduleRadius < 0 || options.moduleRadius > 0.5)) {
27
+ throw new Error('Module radius must be between 0.0 and 0.5');
28
+ }
29
+ if (options.eyeRadius !== undefined &&
30
+ (options.eyeRadius < 0 || options.eyeRadius > 0.5)) {
31
+ throw new Error('Eye radius must be between 0.0 and 0.5');
32
+ }
33
+ if (options.gradientAngle &&
34
+ (options.gradientAngle < 0 || options.gradientAngle > 360)) {
35
+ throw new Error('Gradient angle must be between 0 and 360 degrees');
36
+ }
37
+ if (options.logoShape &&
38
+ !VALID_LOGO_SHAPES.includes(options.logoShape)) {
39
+ throw new Error(`Logo shape must be one of: ${VALID_LOGO_SHAPES.join(', ')}`);
40
+ }
41
+ if (options.logoSize && (options.logoSize < 50 || options.logoSize > 500)) {
42
+ throw new Error('Logo size must be between 50 and 500 pixels');
43
+ }
44
+ if (options.errorCorrectionLevel &&
45
+ !VALID_ERROR_CORRECTION_LEVELS.includes(options.errorCorrectionLevel)) {
46
+ throw new Error(`Error correction level must be one of: ${VALID_ERROR_CORRECTION_LEVELS.join(', ')}`);
47
+ }
48
+ // Support both deprecated 'color' and new 'foregroundColor'
49
+ const colorToValidate = options.foregroundColor || options.color;
50
+ if (colorToValidate && !/^#([0-9A-F]{3}){1,2}$/i.test(colorToValidate)) {
51
+ throw new Error('Color must be in hex format (e.g., #000000)');
52
+ }
53
+ if (options.eyeColor && !/^#([0-9A-F]{3}){1,2}$/i.test(options.eyeColor)) {
54
+ throw new Error('Eye color must be in hex format (e.g., #000000)');
55
+ }
56
+ if (options.backgroundColor &&
57
+ !/^#([0-9A-F]{3}){1,2}$/i.test(options.backgroundColor)) {
58
+ throw new Error('Background color must be in hex format (e.g., #ffffff)');
59
+ }
60
+ if (options.logoBackgroundColor &&
61
+ !/^#([0-9A-F]{3}){1,2}$/i.test(options.logoBackgroundColor)) {
62
+ throw new Error('Logo background color must be in hex format (e.g., #ffffff)');
63
+ }
64
+ if (options.gradientColors) {
65
+ const colors = options.gradientColors.split(',').map(c => c.trim());
66
+ colors.forEach(color => {
67
+ if (!/^#([0-9A-F]{3}){1,2}$/i.test(color)) {
68
+ throw new Error(`Invalid gradient color: ${color}. Must be in hex format`);
69
+ }
70
+ });
71
+ }
72
+ // Validate specialized data structures
73
+ if (options.data && options.type) {
74
+ switch (options.type) {
75
+ case 'vcard':
76
+ {
77
+ const vcard = options.data;
78
+ if (!vcard.firstName && !vcard.lastName) {
79
+ throw new Error('vCard requires at least a first name or last name');
80
+ }
81
+ }
82
+ break;
83
+ case 'wifi':
84
+ {
85
+ const wifi = options.data;
86
+ if (!wifi.ssid) {
87
+ throw new Error('WiFi QR code requires SSID');
88
+ }
89
+ }
90
+ break;
91
+ case 'email':
92
+ {
93
+ const email = options.data;
94
+ if (!email.email) {
95
+ throw new Error('Email QR code requires email address');
96
+ }
97
+ }
98
+ break;
99
+ case 'sms':
100
+ {
101
+ const sms = options.data;
102
+ if (!sms.phone) {
103
+ throw new Error('SMS QR code requires phone number');
104
+ }
105
+ }
106
+ break;
107
+ case 'geo':
108
+ {
109
+ const geo = options.data;
110
+ if (geo.latitude === undefined || geo.longitude === undefined) {
111
+ throw new Error('Geo QR code requires latitude and longitude');
112
+ }
113
+ }
114
+ break;
115
+ }
116
+ }
117
+ }
118
+ /**
119
+ * Normalizes and merges options with defaults
120
+ */
121
+ export function normalizeOptions(options, defaults) {
122
+ return {
123
+ ...defaults,
124
+ ...options
125
+ };
126
+ }
127
+ //# sourceMappingURL=validators.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validators.js","sourceRoot":"","sources":["../../../src/lib/utils/validators.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=validators.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validators.test.d.ts","sourceRoot":"","sources":["../../../src/lib/utils/validators.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,62 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { validateOptions, normalizeOptions } from './validators.js';
3
+ describe('validators', () => {
4
+ describe('validateOptions', () => {
5
+ it('should validate valid basic options', () => {
6
+ const options = {
7
+ url: 'https://example.com'
8
+ };
9
+ expect(() => validateOptions(options)).not.toThrow();
10
+ });
11
+ it('should throw error for missing URL', () => {
12
+ const options = {};
13
+ expect(() => validateOptions(options)).toThrow('URL, text content, or structured data is required');
14
+ });
15
+ it('should throw error for invalid size range', () => {
16
+ const options = {
17
+ url: 'https://example.com',
18
+ size: 50
19
+ };
20
+ expect(() => validateOptions(options)).toThrow('Size must be between 100 and 5000 pixels');
21
+ });
22
+ it('should throw error for invalid module radius', () => {
23
+ const options = {
24
+ url: 'https://example.com',
25
+ moduleRadius: 0.6
26
+ };
27
+ expect(() => validateOptions(options)).toThrow('Module radius must be between 0.0 and 0.5');
28
+ });
29
+ it('should validate gradient with string colors', () => {
30
+ const options = {
31
+ url: 'https://example.com',
32
+ gradient: true,
33
+ gradientColors: '#ff0000,#00ff00'
34
+ };
35
+ expect(() => validateOptions(options)).not.toThrow();
36
+ });
37
+ it('should throw error for invalid error correction level', () => {
38
+ const options = {
39
+ url: 'https://example.com',
40
+ errorCorrectionLevel: 'X'
41
+ };
42
+ expect(() => validateOptions(options)).toThrow();
43
+ });
44
+ });
45
+ describe('normalizeOptions', () => {
46
+ it('should merge options with defaults', () => {
47
+ const options = {
48
+ url: 'https://example.com',
49
+ size: 500
50
+ };
51
+ const defaults = {
52
+ margin: 2,
53
+ backgroundColor: '#ffffff'
54
+ };
55
+ const normalized = normalizeOptions(options, defaults);
56
+ expect(normalized.url).toBe('https://example.com');
57
+ expect(normalized.size).toBe(500);
58
+ expect(normalized.backgroundColor).toBe('#ffffff');
59
+ });
60
+ });
61
+ });
62
+ //# sourceMappingURL=validators.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validators.test.js","sourceRoot":"","sources":["../../../src/lib/utils/validators.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAGpE,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC1B,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;QAC/B,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;YAC7C,MAAM,OAAO,GAAc;gBACzB,GAAG,EAAE,qBAAqB;aAC3B,CAAC;YAEF,MAAM,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;QACvD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;YAC5C,MAAM,OAAO,GAAc,EAAS,CAAC;YAErC,MAAM,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAC5C,mDAAmD,CACpD,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;YACnD,MAAM,OAAO,GAAc;gBACzB,GAAG,EAAE,qBAAqB;gBAC1B,IAAI,EAAE,EAAE;aACT,CAAC;YAEF,MAAM,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAC5C,0CAA0C,CAC3C,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;YACtD,MAAM,OAAO,GAAc;gBACzB,GAAG,EAAE,qBAAqB;gBAC1B,YAAY,EAAE,GAAG;aAClB,CAAC;YAEF,MAAM,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAC5C,2CAA2C,CAC5C,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;YACrD,MAAM,OAAO,GAAc;gBACzB,GAAG,EAAE,qBAAqB;gBAC1B,QAAQ,EAAE,IAAI;gBACd,cAAc,EAAE,iBAAiB;aAClC,CAAC;YAEF,MAAM,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;QACvD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;YAC/D,MAAM,OAAO,GAAc;gBACzB,GAAG,EAAE,qBAAqB;gBAC1B,oBAAoB,EAAE,GAAU;aACjC,CAAC;YAEF,MAAM,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;QACnD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;QAChC,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;YAC5C,MAAM,OAAO,GAAc;gBACzB,GAAG,EAAE,qBAAqB;gBAC1B,IAAI,EAAE,GAAG;aACV,CAAC;YAEF,MAAM,QAAQ,GAAG;gBACf,MAAM,EAAE,CAAC;gBACT,eAAe,EAAE,SAAS;aAC3B,CAAC;YAEF,MAAM,UAAU,GAAG,gBAAgB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;YAEvD,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;YACnD,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAClC,MAAM,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACrD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
package/package.json ADDED
@@ -0,0 +1,87 @@
1
+ {
2
+ "name": "@qr-styled/node",
3
+ "version": "1.0.0",
4
+ "description": "A professional Node.js QR code generator library with advanced styling options including gradients, rounded modules, logo support, specialized QR types (vCard, WiFi, Email, SMS, Geo), SVG export, and eye customization",
5
+ "main": "./dist/index.js",
6
+ "type": "module",
7
+ "exports": {
8
+ ".": {
9
+ "import": "./dist/index.js",
10
+ "types": "./dist/index.d.ts"
11
+ },
12
+ "./package.json": "./package.json"
13
+ },
14
+ "bin": {
15
+ "qr-styled": "./dist/cli/index.js",
16
+ "qrgen": "./dist/cli/index.js"
17
+ },
18
+ "scripts": {
19
+ "build": "tsc",
20
+ "prepublishOnly": "npm run build",
21
+ "start": "tsx src/cli/index.ts",
22
+ "dev": "tsx src/cli/index.ts",
23
+ "test": "vitest run",
24
+ "test:watch": "vitest",
25
+ "test:ui": "vitest --ui",
26
+ "test:coverage": "vitest run --coverage",
27
+ "example:basic": "tsx examples/basic.ts",
28
+ "example:programmatic": "tsx examples/programmatic.ts",
29
+ "example:advanced": "tsx examples/advanced.ts",
30
+ "example:basic-styles": "tsx examples/basic-examples.ts",
31
+ "example:create-logos": "tsx examples/create-logos.ts",
32
+ "example:with-logos": "tsx examples/logo-examples.ts",
33
+ "example:all": "npm run example:advanced && npm run example:basic-styles && npm run example:create-logos && npm run example:with-logos"
34
+ },
35
+ "keywords": [
36
+ "qr",
37
+ "qrcode",
38
+ "qr-code",
39
+ "generator",
40
+ "styled",
41
+ "gradient",
42
+ "logo",
43
+ "custom",
44
+ "canvas",
45
+ "image",
46
+ "vcard",
47
+ "wifi",
48
+ "svg",
49
+ "email",
50
+ "sms",
51
+ "geo",
52
+ "contact-card",
53
+ "typescript"
54
+ ],
55
+ "author": "Luis Manuel Yerena Sosa",
56
+ "license": "MIT",
57
+ "engines": {
58
+ "node": ">=14.0.0"
59
+ },
60
+ "repository": {
61
+ "type": "git",
62
+ "url": "https://github.com/Luisma92/qr-generator-styled.git"
63
+ },
64
+ "bugs": {
65
+ "url": "https://github.com/Luisma92/qr-generator-styled/issues"
66
+ },
67
+ "homepage": "https://github.com/Luisma92/qr-generator-styled#readme",
68
+ "dependencies": {
69
+ "canvas": "^3.2.0",
70
+ "chalk": "^5.6.2",
71
+ "qrcode": "^1.5.4",
72
+ "yargs": "^18.0.0"
73
+ },
74
+ "files": [
75
+ "dist/",
76
+ "README.md",
77
+ "LICENSE"
78
+ ],
79
+ "devDependencies": {
80
+ "@types/node": "^25.2.3",
81
+ "@types/yargs": "^17.0.35",
82
+ "@vitest/ui": "^4.0.18",
83
+ "tsx": "^4.21.0",
84
+ "typescript": "^5.9.3",
85
+ "vitest": "^4.0.18"
86
+ }
87
+ }