@ucptools/validator 1.0.1 → 1.2.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 (162) hide show
  1. package/dist/auth/config.d.ts +20 -0
  2. package/dist/auth/config.d.ts.map +1 -0
  3. package/dist/auth/config.js +114 -0
  4. package/dist/auth/config.js.map +1 -0
  5. package/dist/auth/index.d.ts +5 -0
  6. package/dist/auth/index.d.ts.map +1 -0
  7. package/dist/auth/index.js +17 -0
  8. package/dist/auth/index.js.map +1 -0
  9. package/dist/auth/middleware.d.ts +45 -0
  10. package/dist/auth/middleware.d.ts.map +1 -0
  11. package/dist/auth/middleware.js +170 -0
  12. package/dist/auth/middleware.js.map +1 -0
  13. package/dist/auth/service.d.ts +80 -0
  14. package/dist/auth/service.d.ts.map +1 -0
  15. package/dist/auth/service.js +298 -0
  16. package/dist/auth/service.js.map +1 -0
  17. package/dist/cli/index.js +96 -0
  18. package/dist/cli/index.js.map +1 -1
  19. package/dist/cli/mock-server.d.ts +20 -0
  20. package/dist/cli/mock-server.d.ts.map +1 -0
  21. package/dist/cli/mock-server.js +261 -0
  22. package/dist/cli/mock-server.js.map +1 -0
  23. package/dist/db/index.d.ts +8 -2
  24. package/dist/db/index.d.ts.map +1 -1
  25. package/dist/db/index.js +22 -5
  26. package/dist/db/index.js.map +1 -1
  27. package/dist/db/schema.d.ts +3570 -128
  28. package/dist/db/schema.d.ts.map +1 -1
  29. package/dist/db/schema.js +377 -17
  30. package/dist/db/schema.js.map +1 -1
  31. package/dist/db/utils.d.ts +252 -0
  32. package/dist/db/utils.d.ts.map +1 -0
  33. package/dist/db/utils.js +295 -0
  34. package/dist/db/utils.js.map +1 -0
  35. package/dist/feed-analyzer/feed-analyzer.d.ts.map +1 -1
  36. package/dist/feed-analyzer/feed-analyzer.js +218 -4
  37. package/dist/feed-analyzer/feed-analyzer.js.map +1 -1
  38. package/dist/feed-analyzer/types.d.ts +82 -1
  39. package/dist/feed-analyzer/types.d.ts.map +1 -1
  40. package/dist/feed-analyzer/types.js +13 -0
  41. package/dist/feed-analyzer/types.js.map +1 -1
  42. package/dist/generator/profile-builder.d.ts.map +1 -1
  43. package/dist/generator/profile-builder.js +158 -115
  44. package/dist/generator/profile-builder.js.map +1 -1
  45. package/dist/lib/analytics.d.ts +349 -0
  46. package/dist/lib/analytics.d.ts.map +1 -0
  47. package/dist/lib/analytics.js +198 -0
  48. package/dist/lib/analytics.js.map +1 -0
  49. package/dist/security/security-scanner.d.ts.map +1 -1
  50. package/dist/security/security-scanner.js +130 -2
  51. package/dist/security/security-scanner.js.map +1 -1
  52. package/dist/security/types.d.ts +32 -0
  53. package/dist/security/types.d.ts.map +1 -1
  54. package/dist/security/types.js.map +1 -1
  55. package/dist/services/analytics.d.ts +114 -0
  56. package/dist/services/analytics.d.ts.map +1 -0
  57. package/dist/services/analytics.js +862 -0
  58. package/dist/services/analytics.js.map +1 -0
  59. package/dist/services/badge.d.ts +31 -0
  60. package/dist/services/badge.d.ts.map +1 -0
  61. package/dist/services/badge.js +152 -0
  62. package/dist/services/badge.js.map +1 -0
  63. package/dist/services/cron.d.ts +127 -0
  64. package/dist/services/cron.d.ts.map +1 -0
  65. package/dist/services/cron.js +693 -0
  66. package/dist/services/cron.js.map +1 -0
  67. package/dist/services/directory.d.ts +2 -0
  68. package/dist/services/directory.d.ts.map +1 -1
  69. package/dist/services/directory.js +45 -27
  70. package/dist/services/directory.js.map +1 -1
  71. package/dist/services/email.d.ts +127 -0
  72. package/dist/services/email.d.ts.map +1 -0
  73. package/dist/services/email.js +876 -0
  74. package/dist/services/email.js.map +1 -0
  75. package/dist/services/hosted-profiles.d.ts +77 -0
  76. package/dist/services/hosted-profiles.d.ts.map +1 -0
  77. package/dist/services/hosted-profiles.js +433 -0
  78. package/dist/services/hosted-profiles.js.map +1 -0
  79. package/dist/services/latency.d.ts +67 -0
  80. package/dist/services/latency.d.ts.map +1 -0
  81. package/dist/services/latency.js +274 -0
  82. package/dist/services/latency.js.map +1 -0
  83. package/dist/services/manifest-compliance.d.ts +64 -0
  84. package/dist/services/manifest-compliance.d.ts.map +1 -0
  85. package/dist/services/manifest-compliance.js +271 -0
  86. package/dist/services/manifest-compliance.js.map +1 -0
  87. package/dist/services/monitoring-diff.d.ts +31 -0
  88. package/dist/services/monitoring-diff.d.ts.map +1 -0
  89. package/dist/services/monitoring-diff.js +189 -0
  90. package/dist/services/monitoring-diff.js.map +1 -0
  91. package/dist/services/notifications.d.ts +46 -0
  92. package/dist/services/notifications.d.ts.map +1 -0
  93. package/dist/services/notifications.js +88 -0
  94. package/dist/services/notifications.js.map +1 -0
  95. package/dist/services/posthog.d.ts +43 -0
  96. package/dist/services/posthog.d.ts.map +1 -0
  97. package/dist/services/posthog.js +110 -0
  98. package/dist/services/posthog.js.map +1 -0
  99. package/dist/services/stripe.d.ts +93 -0
  100. package/dist/services/stripe.d.ts.map +1 -0
  101. package/dist/services/stripe.js +490 -0
  102. package/dist/services/stripe.js.map +1 -0
  103. package/dist/services/validation-history.d.ts +99 -0
  104. package/dist/services/validation-history.d.ts.map +1 -0
  105. package/dist/services/validation-history.js +344 -0
  106. package/dist/services/validation-history.js.map +1 -0
  107. package/dist/services/validation-logging.d.ts +103 -0
  108. package/dist/services/validation-logging.d.ts.map +1 -0
  109. package/dist/services/validation-logging.js +210 -0
  110. package/dist/services/validation-logging.js.map +1 -0
  111. package/dist/services/validation.d.ts +119 -0
  112. package/dist/services/validation.d.ts.map +1 -0
  113. package/dist/services/validation.js +1185 -0
  114. package/dist/services/validation.js.map +1 -0
  115. package/dist/simulator/agent-simulator.d.ts.map +1 -1
  116. package/dist/simulator/agent-simulator.js +229 -9
  117. package/dist/simulator/agent-simulator.js.map +1 -1
  118. package/dist/simulator/types.d.ts +26 -0
  119. package/dist/simulator/types.d.ts.map +1 -1
  120. package/dist/simulator/types.js.map +1 -1
  121. package/dist/types/acp-validation.d.ts +87 -0
  122. package/dist/types/acp-validation.d.ts.map +1 -0
  123. package/dist/types/acp-validation.js +40 -0
  124. package/dist/types/acp-validation.js.map +1 -0
  125. package/dist/types/analytics.d.ts +182 -0
  126. package/dist/types/analytics.d.ts.map +1 -0
  127. package/dist/types/analytics.js +7 -0
  128. package/dist/types/analytics.js.map +1 -0
  129. package/dist/types/generator.d.ts +4 -0
  130. package/dist/types/generator.d.ts.map +1 -1
  131. package/dist/types/ucp-profile.d.ts +32 -2
  132. package/dist/types/ucp-profile.d.ts.map +1 -1
  133. package/dist/types/ucp-profile.js +31 -1
  134. package/dist/types/ucp-profile.js.map +1 -1
  135. package/dist/types/validation.d.ts +14 -0
  136. package/dist/types/validation.d.ts.map +1 -1
  137. package/dist/types/validation.js +19 -0
  138. package/dist/types/validation.js.map +1 -1
  139. package/dist/validator/acp/index.d.ts +31 -0
  140. package/dist/validator/acp/index.d.ts.map +1 -0
  141. package/dist/validator/acp/index.js +574 -0
  142. package/dist/validator/acp/index.js.map +1 -0
  143. package/dist/validator/network-validator.d.ts.map +1 -1
  144. package/dist/validator/network-validator.js +23 -13
  145. package/dist/validator/network-validator.js.map +1 -1
  146. package/dist/validator/rules-validator.d.ts +8 -0
  147. package/dist/validator/rules-validator.d.ts.map +1 -1
  148. package/dist/validator/rules-validator.js +159 -43
  149. package/dist/validator/rules-validator.js.map +1 -1
  150. package/dist/validator/structural-validator.d.ts.map +1 -1
  151. package/dist/validator/structural-validator.js +283 -53
  152. package/dist/validator/structural-validator.js.map +1 -1
  153. package/dist/validator/utils.d.ts +62 -0
  154. package/dist/validator/utils.d.ts.map +1 -0
  155. package/dist/validator/utils.js +151 -0
  156. package/dist/validator/utils.js.map +1 -0
  157. package/package.json +45 -12
  158. package/.claude/settings.local.json +0 -60
  159. package/.vercel/README.txt +0 -11
  160. package/.vercel/project.json +0 -1
  161. package/publish-output.txt +0 -0
  162. package/tsconfig.json +0 -20
@@ -0,0 +1,151 @@
1
+ "use strict";
2
+ /**
3
+ * Validator Utilities
4
+ * Helper functions for normalizing UCP profile data
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.isDraftCapability = isDraftCapability;
8
+ exports.resolveSeverity = resolveSeverity;
9
+ exports.normalizeCapabilities = normalizeCapabilities;
10
+ exports.normalizeServices = normalizeServices;
11
+ const ucp_profile_js_1 = require("../types/ucp-profile.js");
12
+ /**
13
+ * Check if a capability is a draft specification
14
+ */
15
+ function isDraftCapability(capabilityName) {
16
+ return ucp_profile_js_1.CAPABILITY_STABILITY[capabilityName] === 'draft';
17
+ }
18
+ /**
19
+ * Resolve validation severity based on capability stability.
20
+ * Discovery blockers are always errors regardless of draft/stable status.
21
+ * Draft capabilities get warnings; stable capabilities get errors.
22
+ */
23
+ function resolveSeverity(capabilityName, isDiscoveryBlocker = false) {
24
+ if (isDiscoveryBlocker)
25
+ return 'error';
26
+ return isDraftCapability(capabilityName) ? 'warn' : 'error';
27
+ }
28
+ /**
29
+ * Capabilities can be in two formats:
30
+ * 1. Array format: [{ name, version, spec, schema, ... }, ...]
31
+ * 2. Object format (Shopify): { [name]: [{ version, spec, schema, ... }, ...] }
32
+ *
33
+ * This function normalizes both to our standard array format.
34
+ */
35
+ function normalizeCapabilities(capabilities) {
36
+ if (!capabilities) {
37
+ return [];
38
+ }
39
+ // Already an array - validate it looks like capabilities and return
40
+ if (Array.isArray(capabilities)) {
41
+ // Check if array items look like UcpCapability (have name property)
42
+ if (capabilities.length === 0 || (capabilities[0] && typeof capabilities[0] === 'object' && 'name' in capabilities[0])) {
43
+ return capabilities;
44
+ }
45
+ // Array of strings or other non-object format - return empty
46
+ return [];
47
+ }
48
+ // Object format - convert to array
49
+ if (typeof capabilities === 'object') {
50
+ const normalized = [];
51
+ for (const [name, entries] of Object.entries(capabilities)) {
52
+ // Each capability name can have multiple version entries
53
+ if (Array.isArray(entries)) {
54
+ for (const entry of entries) {
55
+ if (entry && typeof entry === 'object') {
56
+ normalized.push({
57
+ name,
58
+ version: entry.version || '',
59
+ spec: entry.spec || '',
60
+ schema: entry.schema || '',
61
+ extends: entry.extends,
62
+ config: entry.config,
63
+ });
64
+ }
65
+ }
66
+ }
67
+ }
68
+ return normalized;
69
+ }
70
+ // Unknown format - return empty array
71
+ return [];
72
+ }
73
+ /**
74
+ * Services can be in two formats:
75
+ * 1. Object format (our format): { [name]: { version, rest?, mcp?, ... } }
76
+ * 2. Array format (Shopify): { [name]: [{ version, transport, endpoint, ... }, ...] }
77
+ *
78
+ * This function normalizes services and returns individual service objects.
79
+ */
80
+ function normalizeServices(services) {
81
+ if (!services) {
82
+ return [];
83
+ }
84
+ const normalized = [];
85
+ for (const [serviceName, serviceData] of Object.entries(services)) {
86
+ if (Array.isArray(serviceData)) {
87
+ // Array format - convert each entry to UcpService
88
+ for (const entry of serviceData) {
89
+ const service = convertServiceEntry(entry);
90
+ if (service) {
91
+ normalized.push({ name: serviceName, service });
92
+ }
93
+ }
94
+ }
95
+ else if (serviceData && typeof serviceData === 'object') {
96
+ // Already UcpService format
97
+ normalized.push({ name: serviceName, service: serviceData });
98
+ }
99
+ }
100
+ return normalized;
101
+ }
102
+ /**
103
+ * Convert a Shopify-style service entry to our UcpService format
104
+ */
105
+ function convertServiceEntry(entry) {
106
+ if (!entry || typeof entry !== 'object') {
107
+ return null;
108
+ }
109
+ const service = {
110
+ version: entry.version || '',
111
+ spec: entry.spec || '',
112
+ };
113
+ // Handle transport-based entries (Shopify format)
114
+ if (entry.transport) {
115
+ switch (entry.transport) {
116
+ case 'rest':
117
+ service.rest = {
118
+ schema: entry.schema || '',
119
+ endpoint: entry.endpoint || '',
120
+ };
121
+ break;
122
+ case 'mcp':
123
+ service.mcp = {
124
+ schema: entry.schema || '',
125
+ endpoint: entry.endpoint || '',
126
+ };
127
+ break;
128
+ case 'a2a':
129
+ service.a2a = {
130
+ agentCard: entry.endpoint || '',
131
+ };
132
+ break;
133
+ case 'embedded':
134
+ service.embedded = {
135
+ schema: entry.schema || '',
136
+ };
137
+ break;
138
+ }
139
+ }
140
+ // Handle direct transport properties (our format)
141
+ if (entry.rest)
142
+ service.rest = entry.rest;
143
+ if (entry.mcp)
144
+ service.mcp = entry.mcp;
145
+ if (entry.a2a)
146
+ service.a2a = entry.a2a;
147
+ if (entry.embedded)
148
+ service.embedded = entry.embedded;
149
+ return service;
150
+ }
151
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/validator/utils.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,58 +1,92 @@
1
1
  {
2
2
  "name": "@ucptools/validator",
3
- "version": "1.0.1",
3
+ "version": "1.2.0",
4
4
  "description": "Validate and generate UCP (Universal Commerce Protocol) Business Profiles",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
7
7
  "bin": {
8
- "ucp-validate": "./dist/cli/index.js"
8
+ "ucp-validate": "./dist/cli/index.js",
9
+ "ucptools": "./dist/cli/index.js"
9
10
  },
10
11
  "scripts": {
11
- "build": "tsc",
12
- "dev": "tsx watch src/api/server.ts",
13
- "start": "node dist/api/server.js",
12
+ "dev": "next dev -p 3001",
13
+ "dev:api": "tsx watch --env-file=.env.local src/api/server.ts",
14
+ "build": "next build && tsc -p tsconfig.api.json",
15
+ "build:api": "tsc -p tsconfig.api.json",
16
+ "start": "next start",
17
+ "start:api": "node dist/api/server.js",
14
18
  "test": "vitest",
15
- "lint": "eslint src --ext .ts",
19
+ "lint": "next lint && eslint src --ext .ts",
20
+ "typecheck": "tsc --noEmit --pretty && node -e \"console.log('\\n✓ TypeScript check completed successfully')\"",
16
21
  "validate": "tsx src/cli/index.ts",
17
22
  "generate": "tsx src/cli/generate.ts",
18
23
  "db:generate": "drizzle-kit generate",
19
- "db:migrate": "drizzle-kit migrate",
24
+ "db:migrate": "node scripts/migrate.js",
20
25
  "db:push": "drizzle-kit push",
21
- "db:studio": "drizzle-kit studio"
26
+ "db:studio": "drizzle-kit studio",
27
+ "analyze:competition": "tsx scripts/competition-analysis.ts"
22
28
  },
23
29
  "keywords": [
24
30
  "ucp",
25
31
  "universal-commerce-protocol",
26
32
  "profile-generator",
27
- "validator"
33
+ "validator",
34
+ "ucp-mock-server",
35
+ "ucp-simulator",
36
+ "ucp-cli",
37
+ "ucp-testing",
38
+ "ai-commerce",
39
+ "agentic-commerce",
40
+ "google-shopping",
41
+ "shopify-ucp"
28
42
  ],
29
43
  "author": "UCP.tools",
30
44
  "license": "MIT",
31
45
  "dependencies": {
32
- "@neondatabase/serverless": "^1.0.2",
46
+ "@auth/core": "^0.41.1",
47
+ "@auth/drizzle-adapter": "^1.11.1",
48
+ "@heroicons/react": "^2.2.0",
33
49
  "@ucp-js/sdk": "^0.1.0",
34
50
  "ajv": "^8.17.1",
35
51
  "ajv-formats": "^3.0.1",
52
+ "bcryptjs": "^3.0.3",
36
53
  "chalk": "^5.3.0",
37
54
  "commander": "^12.1.0",
55
+ "cookie-parser": "^1.4.7",
38
56
  "drizzle-orm": "^0.45.1",
39
57
  "express": "^4.21.0",
58
+ "google-auth-library": "^10.5.0",
40
59
  "jose": "^5.9.6",
60
+ "jspdf": "^4.0.0",
61
+ "jspdf-autotable": "^5.0.7",
41
62
  "nanoid": "^5.0.7",
63
+ "next": "^16.1.4",
42
64
  "pg": "^8.13.0",
43
65
  "pino": "^9.5.0",
44
66
  "pino-pretty": "^11.3.0",
67
+ "playwright": "^1.58.0",
68
+ "posthog-js": "^1.205.0",
69
+ "posthog-node": "^5.24.17",
70
+ "puppeteer": "^24.36.1",
71
+ "react": "^19.2.3",
72
+ "react-dom": "^19.2.3",
73
+ "stripe": "^20.2.0",
45
74
  "zod": "^3.23.8"
46
75
  },
47
76
  "devDependencies": {
77
+ "@types/bcryptjs": "^2.4.6",
78
+ "@types/cookie-parser": "^1.4.10",
48
79
  "@types/express": "^5.0.0",
49
80
  "@types/node": "^22.9.0",
50
81
  "@types/pg": "^8.11.10",
82
+ "@types/react": "19.2.9",
83
+ "@types/supertest": "^6.0.3",
51
84
  "@vercel/node": "^5.5.20",
52
85
  "dotenv": "^17.2.3",
53
86
  "drizzle-kit": "^0.31.8",
54
87
  "png-to-ico": "^3.0.1",
55
88
  "sharp": "^0.34.5",
89
+ "supertest": "^7.2.2",
56
90
  "tsx": "^4.19.2",
57
91
  "typescript": "^5.6.3",
58
92
  "vitest": "^4.0.17"
@@ -60,8 +94,7 @@
60
94
  "overrides": {
61
95
  "diff": "^8.0.3",
62
96
  "undici": "^7.0.0",
63
- "esbuild": "^0.25.0",
64
- "path-to-regexp": "^8.0.0"
97
+ "esbuild": "^0.25.0"
65
98
  },
66
99
  "engines": {
67
100
  "node": ">=20.0.0"
@@ -1,60 +0,0 @@
1
- {
2
- "permissions": {
3
- "allow": [
4
- "Bash(git add:*)",
5
- "Bash(git commit:*)",
6
- "Bash(gh repo view:*)",
7
- "WebFetch(domain:github.com)",
8
- "Bash(gh issue create --title \"UCP Merchant Directory - Public registry of UCP-enabled sites\" --body \"$\\(cat <<''EOF''\n## Description\nCreate a public directory/registry of UCP-enabled merchant sites. **No one else has this** - first-mover opportunity.\n\n## Value\n- Unique resource in the UCP ecosystem\n- Drives traffic as the go-to place to discover UCP merchants\n- Builds community and network effects\n- SEO for \"UCP merchants\", \"UCP enabled stores\"\n\n## Features\n- [ ] Database to store validated UCP merchants\n- [ ] Public directory page with search/filter\n- [ ] Auto-add sites that pass validation \\(opt-in\\)\n- [ ] Categories \\(e-commerce platform, industry, region\\)\n- [ ] Badge for listed merchants \\(\"Listed on UCPtools Directory\"\\)\n- [ ] API endpoint to query directory\n\n## Technical Considerations\n- Storage: Vercel KV, Supabase, or similar\n- Moderation: prevent spam/fake entries\n- Privacy: only list with merchant consent\n\n## Effort\nMedium\n\n## Priority\nHigh - First-mover advantage\nEOF\n\\)\" --label \"enhancement,first-mover,priority:high\")",
9
- "Bash(gh issue create:*)",
10
- "Bash(gh release:*)",
11
- "Bash(git checkout:*)",
12
- "Bash(npx -y @neondatabase/mcp-server-neon --help)",
13
- "WebFetch(domain:neon.tech)",
14
- "WebFetch(domain:neon.com)",
15
- "Bash(npx neonctl@latest init)",
16
- "Bash(test:*)",
17
- "Bash(claude mcp add:*)",
18
- "Bash(node scripts/setup-benchmark-db.js:*)",
19
- "Bash(node --check:*)",
20
- "Bash(git push:*)",
21
- "Bash(gh pr create:*)",
22
- "Bash(vercel env add:*)",
23
- "Bash(gh pr merge:*)",
24
- "Bash(git pull:*)",
25
- "Bash(gh issue list:*)",
26
- "Bash(gh issue view:*)",
27
- "Bash(npm install:*)",
28
- "Bash(npm uninstall:*)",
29
- "Bash(npm run db:generate:*)",
30
- "Bash(npm run db:push:*)",
31
- "Bash(source:*)",
32
- "Bash(npx tsc:*)",
33
- "Bash(npm test:*)",
34
- "WebSearch",
35
- "WebFetch(domain:ucp.dev)",
36
- "WebFetch(domain:puddingheroes.com)",
37
- "Bash(curl:*)",
38
- "Bash(npx tsx:*)",
39
- "Bash(node:*)",
40
- "WebFetch(domain:raw.githubusercontent.com)",
41
- "WebFetch(domain:api.github.com)",
42
- "Bash(git rm:*)",
43
- "WebFetch(domain:community.shopify.com)",
44
- "WebFetch(domain:www.consentmo.com)",
45
- "WebFetch(domain:www.searchenginejournal.com)",
46
- "WebFetch(domain:www.cio.com)",
47
- "Bash(gh issue edit:*)",
48
- "Bash(git restore:*)",
49
- "WebFetch(domain:blog.fka.dev)",
50
- "Bash(npm run build:*)",
51
- "Bash(ls:*)",
52
- "Bash(npm pack:*)",
53
- "Bash(npm --version)",
54
- "Bash(dir:*)",
55
- "Bash(echo:*)",
56
- "Bash(npm publish:*)",
57
- "Bash(tee:*)"
58
- ]
59
- }
60
- }
@@ -1,11 +0,0 @@
1
- > Why do I have a folder named ".vercel" in my project?
2
- The ".vercel" folder is created when you link a directory to a Vercel project.
3
-
4
- > What does the "project.json" file contain?
5
- The "project.json" file contains:
6
- - The ID of the Vercel project that you linked ("projectId")
7
- - The ID of the user or team your Vercel project is owned by ("orgId")
8
-
9
- > Should I commit the ".vercel" folder?
10
- No, you should not share the ".vercel" folder with anyone.
11
- Upon creation, it will be automatically added to your ".gitignore" file.
@@ -1 +0,0 @@
1
- {"projectId":"prj_eTjAnoZgKgFqS9xhKX7Xbzhz6aHZ","orgId":"team_2huQYroxI3sER9pnJgLgEOWr","projectName":"ucp-tools"}
File without changes
package/tsconfig.json DELETED
@@ -1,20 +0,0 @@
1
- {
2
- "compilerOptions": {
3
- "target": "ES2022",
4
- "module": "NodeNext",
5
- "moduleResolution": "NodeNext",
6
- "lib": ["ES2022"],
7
- "outDir": "./dist",
8
- "rootDir": "./src",
9
- "strict": true,
10
- "esModuleInterop": true,
11
- "skipLibCheck": true,
12
- "forceConsistentCasingInFileNames": true,
13
- "declaration": true,
14
- "declarationMap": true,
15
- "sourceMap": true,
16
- "resolveJsonModule": true
17
- },
18
- "include": ["src/**/*"],
19
- "exclude": ["node_modules", "dist", "tests"]
20
- }