varlock 0.9.1 → 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 (103) hide show
  1. package/dist/{chunk-FWJAZMC7.js → chunk-2ABRAKHE.js} +4 -4
  2. package/dist/{chunk-FWJAZMC7.js.map → chunk-2ABRAKHE.js.map} +1 -1
  3. package/dist/chunk-2EEXFFKL.js +149 -0
  4. package/dist/chunk-2EEXFFKL.js.map +1 -0
  5. package/dist/chunk-6DXWXIQV.js +1092 -0
  6. package/dist/chunk-6DXWXIQV.js.map +1 -0
  7. package/dist/{chunk-7P3SVUZ5.js → chunk-6JKWTWLB.js} +6 -6
  8. package/dist/{chunk-7P3SVUZ5.js.map → chunk-6JKWTWLB.js.map} +1 -1
  9. package/dist/chunk-7WB7HK5Z.js +21 -0
  10. package/dist/chunk-7WB7HK5Z.js.map +1 -0
  11. package/dist/chunk-AMNNQL7K.js +26 -0
  12. package/dist/chunk-AMNNQL7K.js.map +1 -0
  13. package/dist/{chunk-UG4RTI6V.js → chunk-CKWXLVMV.js} +5 -4
  14. package/dist/chunk-CKWXLVMV.js.map +1 -0
  15. package/dist/{chunk-253NGIPN.js → chunk-FTVXXJMG.js} +3 -3
  16. package/dist/{chunk-253NGIPN.js.map → chunk-FTVXXJMG.js.map} +1 -1
  17. package/dist/{chunk-QHIRGHGG.js → chunk-GBCB7Y3B.js} +3 -3
  18. package/dist/{chunk-QHIRGHGG.js.map → chunk-GBCB7Y3B.js.map} +1 -1
  19. package/dist/chunk-HDKXXS2X.js +1959 -0
  20. package/dist/chunk-HDKXXS2X.js.map +1 -0
  21. package/dist/chunk-JEZQ2DFL.js +198 -0
  22. package/dist/chunk-JEZQ2DFL.js.map +1 -0
  23. package/dist/{chunk-GH73MG2H.js → chunk-LOIJO4MO.js} +4 -4
  24. package/dist/{chunk-GH73MG2H.js.map → chunk-LOIJO4MO.js.map} +1 -1
  25. package/dist/{chunk-ZRHT6QHO.js → chunk-NJONB6CB.js} +5 -5
  26. package/dist/{chunk-ZRHT6QHO.js.map → chunk-NJONB6CB.js.map} +1 -1
  27. package/dist/{chunk-4VC5S7NB.js → chunk-QJ6NMN5H.js} +5 -5
  28. package/dist/{chunk-4VC5S7NB.js.map → chunk-QJ6NMN5H.js.map} +1 -1
  29. package/dist/{chunk-NWKETKFP.js → chunk-QNTIIXD5.js} +5 -5
  30. package/dist/{chunk-NWKETKFP.js.map → chunk-QNTIIXD5.js.map} +1 -1
  31. package/dist/{chunk-W3GUFLIV.js → chunk-U7RQPX5K.js} +349 -1130
  32. package/dist/chunk-U7RQPX5K.js.map +1 -0
  33. package/dist/{chunk-FSLTOPCT.js → chunk-UKFHSMKY.js} +4 -4
  34. package/dist/{chunk-FSLTOPCT.js.map → chunk-UKFHSMKY.js.map} +1 -1
  35. package/dist/chunk-V2MTE4J6.js +426 -0
  36. package/dist/chunk-V2MTE4J6.js.map +1 -0
  37. package/dist/{chunk-LOGMWG5X.js → chunk-VODQDF4Q.js} +5 -5
  38. package/dist/{chunk-LOGMWG5X.js.map → chunk-VODQDF4Q.js.map} +1 -1
  39. package/dist/{chunk-BFRONY2O.js → chunk-XADO6HQG.js} +6 -6
  40. package/dist/{chunk-BFRONY2O.js.map → chunk-XADO6HQG.js.map} +1 -1
  41. package/dist/{chunk-US7YQTJZ.js → chunk-XTOUG72X.js} +5 -5
  42. package/dist/{chunk-US7YQTJZ.js.map → chunk-XTOUG72X.js.map} +1 -1
  43. package/dist/cli/cli-executable.js +47 -31
  44. package/dist/cli/cli-executable.js.map +1 -1
  45. package/dist/config-item-2FQ6I6PO.js +7 -0
  46. package/dist/{config-item-IK3DUE5F.js.map → config-item-2FQ6I6PO.js.map} +1 -1
  47. package/dist/dist-WGIHRGBZ.js +4 -0
  48. package/dist/dist-WGIHRGBZ.js.map +1 -0
  49. package/dist/encrypt.command-K2SBJVQ5.js +14 -0
  50. package/dist/encrypt.command-K2SBJVQ5.js.map +1 -0
  51. package/dist/{env-graph-DaF8Aebq.d.ts → env-graph-CXTsI2Eg.d.ts} +3 -0
  52. package/dist/explain.command-E6MR72IY.js +15 -0
  53. package/dist/{explain.command-5DG3ACIH.js.map → explain.command-E6MR72IY.js.map} +1 -1
  54. package/dist/index.d.ts +2 -2
  55. package/dist/index.js +8 -5
  56. package/dist/index.js.map +1 -1
  57. package/dist/init.command-TGDNXHJ7.js +13 -0
  58. package/dist/{init.command-EWCFF2D5.js.map → init.command-TGDNXHJ7.js.map} +1 -1
  59. package/dist/install-plugin.command-Z2S5DIFS.js +13 -0
  60. package/dist/{install-plugin.command-6ESRFNKI.js.map → install-plugin.command-Z2S5DIFS.js.map} +1 -1
  61. package/dist/load.command-K2IH3646.js +15 -0
  62. package/dist/{load.command-QNDTE2VK.js.map → load.command-K2IH3646.js.map} +1 -1
  63. package/dist/lock.command-GL4CLXED.js +7 -0
  64. package/dist/lock.command-GL4CLXED.js.map +1 -0
  65. package/dist/plugin-lib.d.ts +2 -2
  66. package/dist/printenv.command-34LGQT6W.js +15 -0
  67. package/dist/{printenv.command-SBCXAVQT.js.map → printenv.command-34LGQT6W.js.map} +1 -1
  68. package/dist/reveal.command-WOHYRSYO.js +15 -0
  69. package/dist/reveal.command-WOHYRSYO.js.map +1 -0
  70. package/dist/run.command-PPC2X2N7.js +16 -0
  71. package/dist/{run.command-64JM27VM.js.map → run.command-PPC2X2N7.js.map} +1 -1
  72. package/dist/runtime/env.d.ts +1 -1
  73. package/dist/scan.command-4DJBQEML.js +16 -0
  74. package/dist/{scan.command-YFM7VO2I.js.map → scan.command-4DJBQEML.js.map} +1 -1
  75. package/dist/telemetry.command-LIOCXWQK.js +13 -0
  76. package/dist/{telemetry.command-4AEVBTVE.js.map → telemetry.command-LIOCXWQK.js.map} +1 -1
  77. package/dist/typegen.command-COL35ALE.js +15 -0
  78. package/dist/{typegen.command-27OCEPZM.js.map → typegen.command-COL35ALE.js.map} +1 -1
  79. package/native-bins/darwin/VarlockEnclave.app/Contents/CodeResources +0 -0
  80. package/native-bins/darwin/VarlockEnclave.app/Contents/Info.plist +28 -0
  81. package/native-bins/darwin/VarlockEnclave.app/Contents/MacOS/varlock-local-encrypt +0 -0
  82. package/native-bins/darwin/VarlockEnclave.app/Contents/Resources/AppIcon.icns +0 -0
  83. package/native-bins/darwin/VarlockEnclave.app/Contents/Resources/varlock-menu-locked.pdf +0 -0
  84. package/native-bins/darwin/VarlockEnclave.app/Contents/Resources/varlock-menu-unlocked.pdf +0 -0
  85. package/native-bins/darwin/VarlockEnclave.app/Contents/_CodeSignature/CodeResources +150 -0
  86. package/native-bins/linux-arm64/varlock-local-encrypt +0 -0
  87. package/native-bins/linux-x64/varlock-local-encrypt +0 -0
  88. package/native-bins/win32-x64/varlock-local-encrypt.exe +0 -0
  89. package/package.json +9 -2
  90. package/dist/chunk-MIMMYDBC.js +0 -83
  91. package/dist/chunk-MIMMYDBC.js.map +0 -1
  92. package/dist/chunk-UG4RTI6V.js.map +0 -1
  93. package/dist/chunk-W3GUFLIV.js.map +0 -1
  94. package/dist/config-item-IK3DUE5F.js +0 -5
  95. package/dist/explain.command-5DG3ACIH.js +0 -12
  96. package/dist/init.command-EWCFF2D5.js +0 -11
  97. package/dist/install-plugin.command-6ESRFNKI.js +0 -11
  98. package/dist/load.command-QNDTE2VK.js +0 -12
  99. package/dist/printenv.command-SBCXAVQT.js +0 -12
  100. package/dist/run.command-64JM27VM.js +0 -13
  101. package/dist/scan.command-YFM7VO2I.js +0 -13
  102. package/dist/telemetry.command-4AEVBTVE.js +0 -11
  103. package/dist/typegen.command-27OCEPZM.js +0 -12
@@ -0,0 +1,15 @@
1
+ export { commandFn, commandSpec } from './chunk-NJONB6CB.js';
2
+ import './chunk-4A54P4EM.js';
3
+ import './chunk-UKFHSMKY.js';
4
+ import './chunk-V2MTE4J6.js';
5
+ import './chunk-6DXWXIQV.js';
6
+ import './chunk-CHQDS2PI.js';
7
+ import './chunk-GBCB7Y3B.js';
8
+ import './chunk-U7RQPX5K.js';
9
+ import './chunk-7WB7HK5Z.js';
10
+ import './chunk-HDKXXS2X.js';
11
+ import './chunk-2PFIYNFA.js';
12
+ import './chunk-XLYSNOR3.js';
13
+ import './chunk-6PEHRAEP.js';
14
+ //# sourceMappingURL=printenv.command-34LGQT6W.js.map
15
+ //# sourceMappingURL=printenv.command-34LGQT6W.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"printenv.command-SBCXAVQT.js"}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"printenv.command-34LGQT6W.js"}
@@ -0,0 +1,15 @@
1
+ export { commandFn, commandSpec } from './chunk-JEZQ2DFL.js';
2
+ import './chunk-4A54P4EM.js';
3
+ import './chunk-UKFHSMKY.js';
4
+ import './chunk-V2MTE4J6.js';
5
+ import './chunk-6DXWXIQV.js';
6
+ import './chunk-CHQDS2PI.js';
7
+ import './chunk-GBCB7Y3B.js';
8
+ import './chunk-U7RQPX5K.js';
9
+ import './chunk-7WB7HK5Z.js';
10
+ import './chunk-HDKXXS2X.js';
11
+ import './chunk-2PFIYNFA.js';
12
+ import './chunk-XLYSNOR3.js';
13
+ import './chunk-6PEHRAEP.js';
14
+ //# sourceMappingURL=reveal.command-WOHYRSYO.js.map
15
+ //# sourceMappingURL=reveal.command-WOHYRSYO.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"reveal.command-WOHYRSYO.js"}
@@ -0,0 +1,16 @@
1
+ export { commandFn, commandSpec } from './chunk-LOIJO4MO.js';
2
+ import './chunk-4A54P4EM.js';
3
+ import './chunk-UKFHSMKY.js';
4
+ import './chunk-V2MTE4J6.js';
5
+ import './chunk-6DXWXIQV.js';
6
+ import './chunk-CHQDS2PI.js';
7
+ import './chunk-GBCB7Y3B.js';
8
+ import './chunk-U7RQPX5K.js';
9
+ import './chunk-7WB7HK5Z.js';
10
+ import './chunk-HDKXXS2X.js';
11
+ import './chunk-2PFIYNFA.js';
12
+ import './chunk-MGWUDHT5.js';
13
+ import './chunk-XLYSNOR3.js';
14
+ import './chunk-6PEHRAEP.js';
15
+ //# sourceMappingURL=run.command-PPC2X2N7.js.map
16
+ //# sourceMappingURL=run.command-PPC2X2N7.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"run.command-64JM27VM.js"}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"run.command-PPC2X2N7.js"}
@@ -1,4 +1,4 @@
1
- import { d as SerializedEnvGraph } from '../env-graph-DaF8Aebq.js';
1
+ import { d as SerializedEnvGraph } from '../env-graph-CXTsI2Eg.js';
2
2
  import '@env-spec/parser';
3
3
  import '@env-spec/utils/type-utils';
4
4
 
@@ -0,0 +1,16 @@
1
+ export { commandFn, commandSpec, getGitFiles, resolveTargetPaths, scanFileForValues, walkDirectory, walkDirectoryAll } from './chunk-6JKWTWLB.js';
2
+ import './chunk-GXNQVEXD.js';
3
+ import './chunk-2ABRAKHE.js';
4
+ import './chunk-4A54P4EM.js';
5
+ import './chunk-V2MTE4J6.js';
6
+ import './chunk-6DXWXIQV.js';
7
+ import './chunk-CHQDS2PI.js';
8
+ import './chunk-GBCB7Y3B.js';
9
+ import './chunk-U7RQPX5K.js';
10
+ import './chunk-7WB7HK5Z.js';
11
+ import './chunk-HDKXXS2X.js';
12
+ import './chunk-2PFIYNFA.js';
13
+ import './chunk-XLYSNOR3.js';
14
+ import './chunk-6PEHRAEP.js';
15
+ //# sourceMappingURL=scan.command-4DJBQEML.js.map
16
+ //# sourceMappingURL=scan.command-4DJBQEML.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"scan.command-YFM7VO2I.js"}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"scan.command-4DJBQEML.js"}
@@ -0,0 +1,13 @@
1
+ export { commandFn, commandSpec } from './chunk-XTOUG72X.js';
2
+ import './chunk-2ABRAKHE.js';
3
+ import './chunk-4A54P4EM.js';
4
+ import './chunk-CHQDS2PI.js';
5
+ import './chunk-GBCB7Y3B.js';
6
+ import './chunk-U7RQPX5K.js';
7
+ import './chunk-7WB7HK5Z.js';
8
+ import './chunk-HDKXXS2X.js';
9
+ import './chunk-2PFIYNFA.js';
10
+ import './chunk-XLYSNOR3.js';
11
+ import './chunk-6PEHRAEP.js';
12
+ //# sourceMappingURL=telemetry.command-LIOCXWQK.js.map
13
+ //# sourceMappingURL=telemetry.command-LIOCXWQK.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"telemetry.command-4AEVBTVE.js"}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"telemetry.command-LIOCXWQK.js"}
@@ -0,0 +1,15 @@
1
+ export { commandFn, commandSpec } from './chunk-QJ6NMN5H.js';
2
+ import './chunk-4A54P4EM.js';
3
+ import './chunk-UKFHSMKY.js';
4
+ import './chunk-V2MTE4J6.js';
5
+ import './chunk-6DXWXIQV.js';
6
+ import './chunk-CHQDS2PI.js';
7
+ import './chunk-GBCB7Y3B.js';
8
+ import './chunk-U7RQPX5K.js';
9
+ import './chunk-7WB7HK5Z.js';
10
+ import './chunk-HDKXXS2X.js';
11
+ import './chunk-2PFIYNFA.js';
12
+ import './chunk-XLYSNOR3.js';
13
+ import './chunk-6PEHRAEP.js';
14
+ //# sourceMappingURL=typegen.command-COL35ALE.js.map
15
+ //# sourceMappingURL=typegen.command-COL35ALE.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"typegen.command-27OCEPZM.js"}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"typegen.command-COL35ALE.js"}
@@ -0,0 +1,28 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3
+ <plist version="1.0">
4
+ <dict>
5
+ <key>CFBundleIdentifier</key>
6
+ <string>dev.varlock.enclave</string>
7
+ <key>CFBundleName</key>
8
+ <string>Varlock</string>
9
+ <key>CFBundleDisplayName</key>
10
+ <string>Varlock</string>
11
+ <key>CFBundleExecutable</key>
12
+ <string>varlock-local-encrypt</string>
13
+ <key>CFBundlePackageType</key>
14
+ <string>APPL</string>
15
+ <key>CFBundleVersion</key>
16
+ <string>0.0.0-preview</string>
17
+ <key>CFBundleShortVersionString</key>
18
+ <string>0.0.0-preview</string>
19
+ <key>LSUIElement</key>
20
+ <true/>
21
+ <key>CFBundleIconFile</key>
22
+ <string>AppIcon</string>
23
+ <key>VarlockBuildMode</key>
24
+ <string>release</string>
25
+ <key>VarlockMenuTitle</key>
26
+ <string>Varlock Secure Enclave</string>
27
+ </dict>
28
+ </plist>
@@ -0,0 +1,150 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3
+ <plist version="1.0">
4
+ <dict>
5
+ <key>files</key>
6
+ <dict>
7
+ <key>Resources/AppIcon.icns</key>
8
+ <data>
9
+ 7pqZoA5SEXJ19XbUt8/+uKcwwo4=
10
+ </data>
11
+ <key>Resources/varlock-menu-locked.pdf</key>
12
+ <data>
13
+ 1xwT5rifR1mshOLBddpLZXh4a4w=
14
+ </data>
15
+ <key>Resources/varlock-menu-unlocked.pdf</key>
16
+ <data>
17
+ qFcSJbv7hIQVNODaABBNfrU9hMk=
18
+ </data>
19
+ </dict>
20
+ <key>files2</key>
21
+ <dict>
22
+ <key>Resources/AppIcon.icns</key>
23
+ <dict>
24
+ <key>hash2</key>
25
+ <data>
26
+ /1DSpeGQVKvj2oN3sO/RD/dB0eXP4xPOmQdRBI7CY0k=
27
+ </data>
28
+ </dict>
29
+ <key>Resources/varlock-menu-locked.pdf</key>
30
+ <dict>
31
+ <key>hash2</key>
32
+ <data>
33
+ hpN+eYA2piZx5N1Kn6SZ2dFLP3U33pvpbXD7/nvArJc=
34
+ </data>
35
+ </dict>
36
+ <key>Resources/varlock-menu-unlocked.pdf</key>
37
+ <dict>
38
+ <key>hash2</key>
39
+ <data>
40
+ dI9uwfrFy56f2fT7KGmvDNmNzFUi+/KnOSAzRDOHa9c=
41
+ </data>
42
+ </dict>
43
+ </dict>
44
+ <key>rules</key>
45
+ <dict>
46
+ <key>^Resources/</key>
47
+ <true/>
48
+ <key>^Resources/.*\.lproj/</key>
49
+ <dict>
50
+ <key>optional</key>
51
+ <true/>
52
+ <key>weight</key>
53
+ <real>1000</real>
54
+ </dict>
55
+ <key>^Resources/.*\.lproj/locversion.plist$</key>
56
+ <dict>
57
+ <key>omit</key>
58
+ <true/>
59
+ <key>weight</key>
60
+ <real>1100</real>
61
+ </dict>
62
+ <key>^Resources/Base\.lproj/</key>
63
+ <dict>
64
+ <key>weight</key>
65
+ <real>1010</real>
66
+ </dict>
67
+ <key>^version.plist$</key>
68
+ <true/>
69
+ </dict>
70
+ <key>rules2</key>
71
+ <dict>
72
+ <key>.*\.dSYM($|/)</key>
73
+ <dict>
74
+ <key>weight</key>
75
+ <real>11</real>
76
+ </dict>
77
+ <key>^(.*/)?\.DS_Store$</key>
78
+ <dict>
79
+ <key>omit</key>
80
+ <true/>
81
+ <key>weight</key>
82
+ <real>2000</real>
83
+ </dict>
84
+ <key>^(Frameworks|SharedFrameworks|PlugIns|Plug-ins|XPCServices|Helpers|MacOS|Library/(Automator|Spotlight|LoginItems))/</key>
85
+ <dict>
86
+ <key>nested</key>
87
+ <true/>
88
+ <key>weight</key>
89
+ <real>10</real>
90
+ </dict>
91
+ <key>^.*</key>
92
+ <true/>
93
+ <key>^Info\.plist$</key>
94
+ <dict>
95
+ <key>omit</key>
96
+ <true/>
97
+ <key>weight</key>
98
+ <real>20</real>
99
+ </dict>
100
+ <key>^PkgInfo$</key>
101
+ <dict>
102
+ <key>omit</key>
103
+ <true/>
104
+ <key>weight</key>
105
+ <real>20</real>
106
+ </dict>
107
+ <key>^Resources/</key>
108
+ <dict>
109
+ <key>weight</key>
110
+ <real>20</real>
111
+ </dict>
112
+ <key>^Resources/.*\.lproj/</key>
113
+ <dict>
114
+ <key>optional</key>
115
+ <true/>
116
+ <key>weight</key>
117
+ <real>1000</real>
118
+ </dict>
119
+ <key>^Resources/.*\.lproj/locversion.plist$</key>
120
+ <dict>
121
+ <key>omit</key>
122
+ <true/>
123
+ <key>weight</key>
124
+ <real>1100</real>
125
+ </dict>
126
+ <key>^Resources/Base\.lproj/</key>
127
+ <dict>
128
+ <key>weight</key>
129
+ <real>1010</real>
130
+ </dict>
131
+ <key>^[^/]+$</key>
132
+ <dict>
133
+ <key>nested</key>
134
+ <true/>
135
+ <key>weight</key>
136
+ <real>10</real>
137
+ </dict>
138
+ <key>^embedded\.provisionprofile$</key>
139
+ <dict>
140
+ <key>weight</key>
141
+ <real>20</real>
142
+ </dict>
143
+ <key>^version\.plist$</key>
144
+ <dict>
145
+ <key>weight</key>
146
+ <real>20</real>
147
+ </dict>
148
+ </dict>
149
+ </dict>
150
+ </plist>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "varlock",
3
- "version": "0.9.1",
3
+ "version": "1.0.0",
4
4
  "description": "AI-safe .env files: Schemas for agents, Secrets for humans.",
5
5
  "main": "index.js",
6
6
  "type": "module",
@@ -17,6 +17,12 @@
17
17
  "build": "tsup",
18
18
  "build:binary": "bun run scripts/build-binaries.ts --dev",
19
19
  "build:binaries": "bun run scripts/build-binaries.ts",
20
+ "test:local-encrypt:reset": "bun run scripts/reset-local-encrypt-state.ts",
21
+ "test:local-encrypt:reset:dry": "bun run scripts/reset-local-encrypt-state.ts --dry-run",
22
+ "test:local-encrypt:fresh": "bun run scripts/reset-local-encrypt-state.ts --status",
23
+ "test:local-encrypt:fresh:dry": "bun run scripts/reset-local-encrypt-state.ts --dry-run --status",
24
+ "pack:local": "bun run scripts/pack-local-package.ts",
25
+ "test:binary:local": "bun run scripts/test-local-binary.ts",
20
26
  "dev": "tsup",
21
27
  "test": "vitest",
22
28
  "test:ci": "vitest --run",
@@ -44,7 +50,8 @@
44
50
  ],
45
51
  "files": [
46
52
  "/bin",
47
- "/dist"
53
+ "/dist",
54
+ "/native-bins"
48
55
  ],
49
56
  "bin": {
50
57
  "varlock": "./bin/cli.js"
@@ -1,83 +0,0 @@
1
- import { CliExitError, loadEnvGraph } from './chunk-QHIRGHGG.js';
2
- import { runWithWorkspaceInfo } from './chunk-W3GUFLIV.js';
3
- import { createDebug } from './chunk-2PFIYNFA.js';
4
- import { __name } from './chunk-6PEHRAEP.js';
5
- import fs from 'fs';
6
- import path from 'path';
7
-
8
- function readVarlockPackageJsonConfig(opts) {
9
- const cwd = opts?.cwd ?? process.cwd();
10
- const pkgPath = path.join(cwd, "package.json");
11
- if (!fs.existsSync(pkgPath)) return void 0;
12
- try {
13
- const pkg = JSON.parse(fs.readFileSync(pkgPath, "utf-8"));
14
- if (pkg.varlock && typeof pkg.varlock === "object") {
15
- return pkg.varlock;
16
- }
17
- } catch {
18
- }
19
- return void 0;
20
- }
21
- __name(readVarlockPackageJsonConfig, "readVarlockPackageJsonConfig");
22
-
23
- // src/lib/load-graph.ts
24
- var debug = createDebug("varlock:load");
25
- function normalizePkgLoadPath(pkgLoadPath) {
26
- if (Array.isArray(pkgLoadPath)) return pkgLoadPath;
27
- return [pkgLoadPath];
28
- }
29
- __name(normalizePkgLoadPath, "normalizePkgLoadPath");
30
- function loadFromPaths(rawPaths, config) {
31
- const resolvedPaths = rawPaths.map((p) => path.resolve(p));
32
- if (resolvedPaths.length === 1) {
33
- debug("using path from %s: %s", config.source, resolvedPaths[0]);
34
- } else {
35
- debug("using %d paths from %s: %s", resolvedPaths.length, config.source, resolvedPaths.join(", "));
36
- }
37
- for (const resolvedPath of resolvedPaths) {
38
- if (!fs.existsSync(resolvedPath)) {
39
- throw new CliExitError(`${config.errorPrefix}: ${resolvedPath}`, {
40
- suggestion: config.errorSuggestion
41
- });
42
- }
43
- }
44
- return runWithWorkspaceInfo(() => loadEnvGraph({
45
- currentEnvFallback: config.currentEnvFallback,
46
- entryFilePaths: resolvedPaths,
47
- afterInit: /* @__PURE__ */ __name(async (_g) => {
48
- }, "afterInit")
49
- }));
50
- }
51
- __name(loadFromPaths, "loadFromPaths");
52
- function loadVarlockEnvGraph(opts) {
53
- const cliPaths = opts?.entryFilePaths?.filter(Boolean);
54
- if (cliPaths && cliPaths.length > 0) {
55
- return loadFromPaths(cliPaths, {
56
- source: "--path flag",
57
- errorPrefix: "The --path value does not exist",
58
- errorSuggestion: "Use `--path` to specify a valid file or directory.",
59
- currentEnvFallback: opts?.currentEnvFallback
60
- });
61
- }
62
- const pkgLoadPath = readVarlockPackageJsonConfig()?.loadPath;
63
- const pkgLoadPaths = pkgLoadPath ? normalizePkgLoadPath(pkgLoadPath) : void 0;
64
- if (pkgLoadPaths) {
65
- return loadFromPaths(pkgLoadPaths, {
66
- source: "package.json varlock.loadPath",
67
- errorPrefix: "A path in `varlock.loadPath` configured in package.json does not exist",
68
- errorSuggestion: "Update `varlock.loadPath` in your package.json to point to valid files or directories.",
69
- currentEnvFallback: opts?.currentEnvFallback
70
- });
71
- }
72
- debug("no path configured, using cwd: %s", process.cwd());
73
- return runWithWorkspaceInfo(() => loadEnvGraph({
74
- currentEnvFallback: opts?.currentEnvFallback,
75
- afterInit: /* @__PURE__ */ __name(async (_g) => {
76
- }, "afterInit")
77
- }));
78
- }
79
- __name(loadVarlockEnvGraph, "loadVarlockEnvGraph");
80
-
81
- export { loadVarlockEnvGraph };
82
- //# sourceMappingURL=chunk-MIMMYDBC.js.map
83
- //# sourceMappingURL=chunk-MIMMYDBC.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/lib/package-json-config.ts","../src/lib/load-graph.ts"],"names":["path","fs"],"mappings":"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","file":"chunk-MIMMYDBC.js","sourcesContent":["import path from 'node:path';\nimport fs from 'node:fs';\n\nexport type VarlockPackageJsonConfig = {\n /** Path (or array of paths) to a specific .env file or directory to use as the entry point for loading */\n loadPath?: string | Array<string>;\n};\n\n/**\n * Reads varlock configuration from the `package.json` in `cwd`.\n * Returns undefined if no `package.json` exists or it has no `varlock` key.\n */\nexport function readVarlockPackageJsonConfig(opts?: { cwd?: string }): VarlockPackageJsonConfig | undefined {\n const cwd = opts?.cwd ?? process.cwd();\n const pkgPath = path.join(cwd, 'package.json');\n if (!fs.existsSync(pkgPath)) return undefined;\n try {\n const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf-8'));\n if (pkg.varlock && typeof pkg.varlock === 'object') {\n return pkg.varlock as VarlockPackageJsonConfig;\n }\n } catch { /* ignore parse errors */ }\n return undefined;\n}\n","import fs from 'node:fs';\nimport path from 'node:path';\nimport { loadEnvGraph } from '../env-graph';\nimport { CliExitError } from '../cli/helpers/exit-error';\nimport { runWithWorkspaceInfo } from './workspace-utils';\nimport { readVarlockPackageJsonConfig } from './package-json-config';\nimport { createDebug } from './debug';\n\nconst debug = createDebug('varlock:load');\n\nfunction normalizePkgLoadPath(pkgLoadPath: string | Array<string>): Array<string> {\n if (Array.isArray(pkgLoadPath)) return pkgLoadPath;\n return [pkgLoadPath];\n}\n\nfunction loadFromPaths(\n rawPaths: Array<string>,\n config: {\n source: string,\n errorPrefix: string,\n errorSuggestion: string,\n currentEnvFallback?: string,\n },\n) {\n const resolvedPaths = rawPaths.map((p) => path.resolve(p));\n\n if (resolvedPaths.length === 1) {\n debug('using path from %s: %s', config.source, resolvedPaths[0]);\n } else {\n debug('using %d paths from %s: %s', resolvedPaths.length, config.source, resolvedPaths.join(', '));\n }\n\n for (const resolvedPath of resolvedPaths) {\n if (!fs.existsSync(resolvedPath)) {\n throw new CliExitError(`${config.errorPrefix}: ${resolvedPath}`, {\n suggestion: config.errorSuggestion,\n });\n }\n }\n\n return runWithWorkspaceInfo(() => loadEnvGraph({\n currentEnvFallback: config.currentEnvFallback,\n entryFilePaths: resolvedPaths,\n afterInit: async (_g) => {\n // TODO: register varlock resolver\n },\n }));\n}\n\nexport function loadVarlockEnvGraph(opts?: {\n currentEnvFallback?: string,\n /** Explicit entry file paths from --path flag(s) - overrides package.json config */\n entryFilePaths?: Array<string>,\n}) {\n const cliPaths = opts?.entryFilePaths?.filter(Boolean);\n\n // If --path flag(s) provided, they take precedence over package.json config\n if (cliPaths && cliPaths.length > 0) {\n // Return early and ignore pkgLoadPaths\n return loadFromPaths(cliPaths, {\n source: '--path flag',\n errorPrefix: 'The --path value does not exist',\n errorSuggestion: 'Use `--path` to specify a valid file or directory.',\n currentEnvFallback: opts?.currentEnvFallback,\n });\n }\n\n // Fall back to package.json varlock.loadPath\n const pkgLoadPath = readVarlockPackageJsonConfig()?.loadPath;\n const pkgLoadPaths = pkgLoadPath ? normalizePkgLoadPath(pkgLoadPath) : undefined;\n\n if (pkgLoadPaths) {\n return loadFromPaths(pkgLoadPaths, {\n source: 'package.json varlock.loadPath',\n errorPrefix: 'A path in `varlock.loadPath` configured in package.json does not exist',\n errorSuggestion: 'Update `varlock.loadPath` in your package.json to point to valid files or directories.',\n currentEnvFallback: opts?.currentEnvFallback,\n });\n }\n\n debug('no path configured, using cwd: %s', process.cwd());\n\n return runWithWorkspaceInfo(() => loadEnvGraph({\n currentEnvFallback: opts?.currentEnvFallback,\n afterInit: async (_g) => {\n // TODO: register varlock resolver\n },\n }));\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../utils/src/git-utils.ts","../src/cli/helpers/infer-schema.ts","../src/cli/helpers/find-env-files.ts","../src/cli/commands/init.command.ts"],"names":["path","fs"],"mappings":"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","file":"chunk-UG4RTI6V.js","sourcesContent":["import { spawnAsync } from './exec-helpers';\nimport { dirname } from 'node:path';\n\nexport async function checkIsFileGitIgnored(path: string, warnIfNotGitRepo = false) {\n try {\n // Use spawnAsync with array arguments to properly handle paths with spaces\n // Pass cwd to run git from the file's directory\n await spawnAsync('git', ['check-ignore', path, '-q'], { cwd: dirname(path) });\n return true;\n } catch (err) {\n // git binary not found (not installed or not in PATH) - check this first\n // before accessing err.data which won't exist on native spawn ENOENT errors\n if ((err as any).code === 'ENOENT') return undefined;\n\n const errorOutput = (err as any).data as string | undefined;\n // git is not installed, so we can't check\n if (\n (err as any).exitCode === 127\n || errorOutput?.includes('not found')\n || errorOutput?.includes('not recognized') // windows\n ) {\n return undefined;\n }\n // `git check-ignore -q` exits with code 1 but no other error if is not ignored\n if (errorOutput === '') return false;\n if (errorOutput?.includes('not a git repository')) {\n if (warnIfNotGitRepo) {\n // eslint-disable-next-line no-console\n console.log('🔶 Your code is not currently in a git repository - run `git init` to initialize a new repo.');\n }\n return false;\n }\n // file is outside the current git repository (e.g., importing from home directory)\n if (errorOutput?.includes('is outside repository')) {\n return undefined;\n }\n // otherwise we'll let it throw since something else is happening\n throw err;\n }\n}\n","import fs from 'node:fs/promises';\nimport {\n envSpecUpdater, ParsedEnvSpecFile, ParsedEnvSpecStaticValue,\n} from '@env-spec/parser';\n\n\nexport type DetectedEnvFile = {\n fileName: string,\n fullPath: string,\n parsedFile: ParsedEnvSpecFile\n};\n\nconst PUBLIC_PREFIXES = [\n 'PUBLIC',\n 'VITE',\n 'NEXT_PUBLIC',\n 'NUXT_PUBLIC',\n];\nconst PUBLIC_KEYWORDS = ['PUBLIC'];\nconst SENSITIVE_KEYWORDS = [\n 'SECRET',\n 'API_KEY',\n 'PASSWORD',\n 'TOKEN',\n 'PRIVATE',\n 'CREDENTIALS',\n];\n\nfunction isValidUrl(val: string) {\n try {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const u = new URL(val);\n return true;\n } catch (err) {\n return false;\n }\n}\n\nconst EMAIL_REGEX = /^(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\nconst VALID_NUMBER_REGEX = /^(0|([1-9][0-9]*))?(\\.[0-9]+)?$/;\n\n\nfunction inferItemDecorators(file: ParsedEnvSpecFile, itemKey: string, valueStr: string) {\n // infer @sensitive\n let itemIsPublic = false;\n if (PUBLIC_PREFIXES.some((prefix) => itemKey.startsWith(prefix))) itemIsPublic = true;\n if (PUBLIC_KEYWORDS.some((keyword) => itemKey.includes(keyword))) itemIsPublic = true;\n\n let itemIsSensitive = false;\n if (SENSITIVE_KEYWORDS.some((keyword) => itemKey.includes(keyword))) itemIsSensitive = true;\n\n if (itemIsPublic) {\n // not marking these for now, since we've already made the default not sensitive\n // envSpecUpdater.setItemDecorator(file, itemKey, 'sensitive', 'false');\n } else if (itemIsSensitive) {\n envSpecUpdater.setItemDecorator(file, itemKey, 'sensitive', 'true');\n }\n\n // infer @type\n // > from key\n if (itemKey === 'PORT' || itemKey.endsWith('_PORT')) {\n envSpecUpdater.setItemDecorator(file, itemKey, 'type', 'port');\n } else if (itemKey.endsWith('_EMAIL')) {\n envSpecUpdater.setItemDecorator(file, itemKey, 'type', 'email');\n } else if (itemKey.endsWith('_URL') || itemKey.endsWith('_URI')) {\n envSpecUpdater.setItemDecorator(file, itemKey, 'type', 'url');\n\n\n // > from value\n } else if (valueStr) {\n // move obvious examples to @example\n if (valueStr.startsWith('<') && valueStr.endsWith('>')) {\n envSpecUpdater.setItemDecorator(file, itemKey, 'example', valueStr);\n // remove example from value\n }\n\n if (valueStr === 'true' || valueStr === 'false') {\n envSpecUpdater.setItemDecorator(file, itemKey, 'type', 'boolean');\n } else if (EMAIL_REGEX.test(valueStr)) {\n envSpecUpdater.setItemDecorator(file, itemKey, 'type', 'email');\n } else if (valueStr !== '0' && valueStr !== '1' && VALID_NUMBER_REGEX.test(valueStr)) {\n envSpecUpdater.setItemDecorator(file, itemKey, 'type', 'number');\n } else if (isValidUrl(valueStr)) {\n envSpecUpdater.setItemDecorator(file, itemKey, 'type', 'url');\n }\n // TODO: more...\n }\n}\n\nexport function inferSchemaUpdates(file: ParsedEnvSpecFile) {\n for (const item of file.configItems) {\n const valueStr = (\n item.value instanceof ParsedEnvSpecStaticValue && item.value.value?.toString()\n ) || '';\n // console.log(item.key, '-', valueStr);\n inferItemDecorators(file, item.key, valueStr);\n }\n}\n\n\nexport function ensureAllItemsExist(schemaFile: ParsedEnvSpecFile, otherFiles: Array<DetectedEnvFile>) {\n const addedItemKeys: Array<string> = [];\n for (const otherFile of otherFiles) {\n for (const item of otherFile.parsedFile.configItems) {\n const itemInSchema = schemaFile.configItems.find((i) => i.key === item.key);\n if (itemInSchema) continue;\n\n if (addedItemKeys.length === 0) {\n envSpecUpdater.injectFromStr(schemaFile, [\n '',\n '# items added to schema by `varlock init`',\n '# that were missing in example, but detected in other .env files',\n '# PLEASE REVIEW THESE!',\n '# ---',\n '',\n ].join('\\n'), { location: 'end' });\n }\n addedItemKeys.push(item.key);\n envSpecUpdater.injectFromStr(schemaFile, `${item.key}=`);\n const itemValue = (\n item.value instanceof ParsedEnvSpecStaticValue && item.value.value?.toString()\n ) || '';\n inferItemDecorators(schemaFile, item.key, String(itemValue));\n }\n }\n}\n\nexport async function detectRedundantValues(\n schemaFile: ParsedEnvSpecFile,\n otherFiles: Record<string, DetectedEnvFile>,\n opts: { delete?: boolean } = {},\n) {\n const redundantItemsBySourcePath: Record<string, Array<string>> = {};\n const schemaValues = schemaFile.toSimpleObj();\n for (const otherFile of Object.values(otherFiles)) {\n if (\n otherFile.fileName.startsWith('.env.schema')\n || otherFile.fileName.startsWith('.env.example')\n || otherFile.fileName.startsWith('.env.sample')\n || otherFile.fileName.startsWith('.env.default')\n ) continue;\n\n const otherFileValues = otherFile.parsedFile.toSimpleObj();\n for (const itemKey in otherFileValues) {\n if (!(itemKey in schemaValues)) continue;\n if (otherFileValues[itemKey] !== schemaValues[itemKey]) continue;\n\n redundantItemsBySourcePath[otherFile.fullPath] ||= [];\n redundantItemsBySourcePath[otherFile.fullPath].push(itemKey);\n if (opts.delete) {\n envSpecUpdater.deleteItem(otherFile.parsedFile, itemKey);\n }\n }\n\n if (opts.delete) {\n await fs.writeFile(otherFile.fullPath, otherFile.parsedFile.toString(), 'utf8');\n }\n }\n\n return redundantItemsBySourcePath;\n}\n","import path from 'node:path';\nimport fs from 'node:fs/promises';\n\n// our tool may generate some additional files which we want to ignore\nconst SKIP_FILE_TYPES = ['.md', '.d.ts'];\n\nexport async function findEnvFiles(opts?: {\n cwd?: string,\n}) {\n const cwd = opts?.cwd || process.cwd();\n\n const envFiles = [];\n\n const filesWithinDir = await fs.readdir(cwd);\n\n // Filter for files starting with .env and check if they exist\n for (const fileName of filesWithinDir) {\n if (fileName === '.env' || fileName.startsWith('.env.')) { // this ignores `.envrc` files\n let skip = false;\n for (const fileType of SKIP_FILE_TYPES) {\n if (fileName.endsWith(fileType)) skip = true;\n }\n if (skip) continue;\n envFiles.push(path.join(cwd, fileName));\n }\n }\n\n // TODO: we may want to look up or down the folder tree?\n // TODO: we could support looking within specific directories (\"config\", \"env\", etc)\n\n return envFiles;\n}\n","/* eslint-disable @stylistic/quotes */\nimport path from 'node:path';\nimport fs from 'node:fs/promises';\nimport ansis from 'ansis';\nimport { isCancel, select } from '@clack/prompts';\nimport { define } from 'gunshi';\nimport { gracefulExit } from 'exit-hook';\n\nimport { envSpecUpdater, parseEnvSpecDotEnvFile } from '@env-spec/parser';\nimport { checkIsFileGitIgnored } from '@env-spec/utils/git-utils';\nimport { pathExists } from '@env-spec/utils/fs-utils';\nimport _ from '@env-spec/utils/my-dash';\n\nimport prompts from '../helpers/prompts';\nimport { fmt, logLines } from '../helpers/pretty-format';\nimport {\n detectRedundantValues, ensureAllItemsExist, inferSchemaUpdates, type DetectedEnvFile,\n} from '../helpers/infer-schema';\nimport { detectJsPackageManager, installJsDependency } from '../helpers/js-package-manager-utils';\nimport { type TypedGunshiCommandFn } from '../helpers/gunshi-type-utils';\nimport { findEnvFiles } from '../helpers/find-env-files';\nimport { tryCatch } from '@env-spec/utils/try-catch';\n\nexport const commandSpec = define({\n name: 'init',\n description: 'Set up varlock in the current project',\n args: {},\n examples: `\nThis command starts an interactive onboarding process to help you get started with Varlock.\nIt will:\n - Scan for existing .env files in your project\n - Help create a .env.schema file from your .env.example or .env.sample file\n - Install varlock as a dependency in package.json (if applicable)\n\n📍 Run this command in directories that contain .env or .env.* files\n\nExamples:\n varlock init # Run in the current directory\n cd path/to/your/project && varlock init\n\nFor more information, visit https://varlock.dev/getting-started/installation\n `.trim(),\n});\n\nexport const commandFn: TypedGunshiCommandFn<typeof commandSpec> = async (ctx) => {\n const jsPackageManager = detectJsPackageManager();\n\n console.log('🧙 Hello and welcome to Varlock 🔒🔥✨');\n\n // scan for all .env files within current directory\n const envFilePaths = await findEnvFiles();\n const parsedEnvFiles: Record<string, DetectedEnvFile> = {};\n for (const filePath of envFilePaths) {\n const fileContents = await fs.readFile(filePath, 'utf-8');\n const fileName = path.basename(filePath);\n const parsedFile = await tryCatch(async () => parseEnvSpecDotEnvFile(fileContents), () => {\n logLines([\n '',\n `Unable to parse ${fmt.filePath(filePath)}`,\n 'This file will be skipped.',\n ]);\n });\n if (!parsedFile) {\n continue;\n }\n parsedEnvFiles[fileName] = {\n fileName,\n fullPath: filePath,\n parsedFile,\n };\n }\n\n const existingSchemaFile = parsedEnvFiles['.env.schema'];\n\n // * SET UP SCHEMA ---------------------------------------------\n if (existingSchemaFile) {\n // for now - we don't do anything if they already have a schema set up\n // in the future, we may want to add more tools for projects that are already set up\n logLines([\n `It looks like you already have a ${fmt.fileName('.env.schema')} file 🎉`,\n 'This init helper is meant to help you get a new project set up.',\n 'If you need to make changes to your schema or values, you can update your files directly.',\n 'See more docs at https://varlock.dev/guides/schema',\n ]);\n } else {\n const allExampleFileNames = Object.keys(parsedEnvFiles).filter((fileName) => {\n return fileName.startsWith('.env.example') || fileName.startsWith('.env.sample');\n });\n let exampleFileToConvert: typeof parsedEnvFiles[keyof typeof parsedEnvFiles] | undefined;\n\n if (allExampleFileNames.length === 1) {\n exampleFileToConvert = parsedEnvFiles[allExampleFileNames[0]];\n } else if (allExampleFileNames.length > 1) {\n console.log('');\n // not quite sure about this, but we'll just let them select one\n const selectedExample = await select({\n message: `We detected more than one example .env file. Which one should we use to create your new ${fmt.fileName('.env.schema')}?`,\n options: allExampleFileNames.map((fileName) => ({\n label: fileName,\n value: parsedEnvFiles[fileName],\n })),\n });\n if (isCancel(selectedExample)) return gracefulExit(0);\n exampleFileToConvert = selectedExample;\n }\n\n // update the schema\n const parsedEnvSchemaFile = exampleFileToConvert?.parsedFile || parseEnvSpecDotEnvFile('');\n if (!parsedEnvSchemaFile) throw new Error('expected parsed .env example file');\n envSpecUpdater.ensureHeader(parsedEnvSchemaFile, [\n 'This env file uses @env-spec - see https://varlock.dev/env-spec for more info',\n '',\n // TODO: add env spec version? real links?\n ].join('\\n'));\n envSpecUpdater.setRootDecorator(parsedEnvSchemaFile, 'defaultRequired', 'infer', { explicitTrue: true });\n envSpecUpdater.setRootDecorator(parsedEnvSchemaFile, 'defaultSensitive', 'false', { explicitTrue: true });\n // TODO: detect js/ts project before adding this\n envSpecUpdater.setRootDecorator(parsedEnvSchemaFile, 'generateTypes', 'lang=ts, path=env.d.ts', { bareFnArgs: true });\n // envSpecUpdater.setRootDecorator(parsedEnvFile, 'envFlag', 'APP_ENV', { comment: 'controls automatic loading of env-specific files (e.g. .env.test, .env.prod, etc.)' });\n\n // add example item\n envSpecUpdater.injectFromStr(parsedEnvSchemaFile, [\n '',\n '# example env variable injected by `varlock init` ⚠️ DELETE THIS ITEM! ⚠️',\n '# @required @sensitive @example=\"example value\"',\n 'EXAMPLE_ITEM=\"delete me!\"',\n '',\n ].join('\\n'), { location: 'after_header' });\n // update some decorators based on some simple heuristics\n inferSchemaUpdates(parsedEnvSchemaFile);\n // add items we find in other env files, but are missing in the schema/example\n ensureAllItemsExist(parsedEnvSchemaFile, Object.values(parsedEnvFiles));\n\n // write new updated schema file\n const schemaFilePath = path.join(process.cwd(), '.env.schema');\n await fs.writeFile(schemaFilePath, parsedEnvSchemaFile.toString());\n\n // log new schema file path\n if (exampleFileToConvert) {\n logLines([\n '',\n `Your ${fmt.fileName(exampleFileToConvert.fileName)} has been used to generate your new ${fmt.fileName('.env.schema')}:`,\n fmt.filePath(schemaFilePath),\n ]);\n } else {\n logLines([\n '',\n `Your new ${fmt.fileName('.env.schema')} file has been created:`,\n fmt.filePath(schemaFilePath),\n ]);\n }\n\n // make sure .env.schema is not gitignored\n if (await checkIsFileGitIgnored(schemaFilePath)) {\n // maybe could do this silently? it's relatively harmless\n logLines([ansis.dim(`(and updated ${fmt.fileName('.gitignore')} to ensure it will be tracked by git)`)]);\n await fs.appendFile('.gitignore', '\\n!.env.schema');\n }\n\n // ask them to review and confirm\n logLines([\n '',\n ansis.bold(`🚧 Please review and update your new ${fmt.fileName('.env.schema')} file! 🚧`),\n `We've done our best to get you started, but you must review and make sure it is correct!`,\n '',\n `👉 Some helpful pointers to get you started:`,\n `- add a description to each item when the name is not self explanatory - it will come through in generated types`,\n `- use ${fmt.decorator('@required')} (or ${fmt.decorator('@optional')}) to tag items that should fail validation when empty`,\n `- use ${fmt.decorator('@sensitive')} to tag items that contain sensitive secrets, and must be handled accordingly`,\n `- use ${fmt.decorator('@type')} to set an item's data type (if not a basic string), which affects validation and coercion logic`,\n `- if an item value is a ${ansis.italic('useful example')} rather than a default, use ${fmt.decorator('@example')}`,\n `- if an item value is just a dummy placeholder, delete it`,\n ]);\n const confirmReviewed = await prompts.confirm({\n message: `Have you reviewed and updated your new ${fmt.fileName('.env.schema')} file?`,\n });\n if (isCancel(confirmReviewed)) return gracefulExit(0);\n\n // reload the graph\n const reloadedSchemaFile = await parseEnvSpecDotEnvFile(await fs.readFile(schemaFilePath, 'utf-8'));\n\n // check if they removed the EXAMPLE_ITEM and warn them\n if (reloadedSchemaFile.configItems.find((i) => i.key === 'EXAMPLE_ITEM')) {\n logLines([\n '',\n ansis.bold(`🚨 Really? ${ansis.red(\"You didn't remove the EXAMPLE_ITEM!\")}`),\n `Please make sure your schema is all correct before using it...`,\n ]);\n }\n\n // delete the example file if they want us to\n if (exampleFileToConvert) {\n const confirmDeleteExample = await prompts.confirm({\n message: `Should we delete your ${fmt.fileName(exampleFileToConvert.fileName)} file? ${ansis.italic.gray('(you can always do this yourself later)')}`,\n });\n if (isCancel(confirmDeleteExample)) return gracefulExit(0);\n if (confirmDeleteExample) {\n await fs.unlink(exampleFileToConvert.fullPath);\n }\n }\n\n // recommendation to delete defaults file\n const defaultsFile = Object.values(parsedEnvFiles).find((f) => {\n return f.fileName.startsWith('.env.default'); // also covers \".env.defaults\"\n });\n if (defaultsFile) {\n logLines([\n '',\n `🚧 We detected a ${fmt.fileName(defaultsFile.fileName)} file in your project`,\n `You should migrate these default values into ${fmt.fileName('.env.schema')} and delete it.`,\n ]);\n }\n\n // detect and remove redundant defaults that are now in the schema\n const redundantInfo = await detectRedundantValues(parsedEnvSchemaFile, parsedEnvFiles);\n if (Object.keys(redundantInfo).length > 0) {\n logLines([\n '',\n ansis.bold('‼️ Now that your schema contains defaults, some values in your other .env files are redundant:'),\n ]);\n for (const [sourcePath, itemKeys] of Object.entries(redundantInfo)) {\n console.log(fmt.filePath(sourcePath));\n console.log(' ', itemKeys.map((k) => ansis.italic(k)).join(', '));\n }\n\n const confirmDeleteRedundant = await prompts.confirm({\n message: 'Should we delete these redundant values from your other .env files?',\n });\n if (isCancel(confirmDeleteRedundant)) return gracefulExit(0);\n if (confirmDeleteRedundant) {\n await detectRedundantValues(parsedEnvSchemaFile, parsedEnvFiles, { delete: true });\n }\n }\n\n // final success!\n logLines([\n '',\n ansis.bold('🎉 Great!'),\n `You can run ${fmt.command('varlock load', { jsPackageManager })} to attempt loading your env vars validate against your new schema.`,\n '',\n 'Check out our docs for more info about integrating into your application.',\n '',\n '📖 https://varlock.dev 👈',\n '',\n ]);\n }\n\n // * MAKE SURE VARLOCK IS INSTALLED ------------------------------------------\n if (jsPackageManager && await pathExists(path.join(process.cwd(), 'package.json'))) {\n const installResult = installJsDependency({\n packageManager: jsPackageManager.name,\n packageName: 'varlock',\n });\n if (installResult) {\n logLines([\n '',\n `✅ Added ${fmt.packageName('varlock')} as a dependency in your package.json`,\n ]);\n }\n }\n\n // * CONFIGURE BUNFIG.TOML FOR BUN PROJECTS ----------------------------------\n if (jsPackageManager?.name === 'bun') {\n const bunfigPath = path.join(process.cwd(), 'bunfig.toml');\n const bunfigExists = await pathExists(bunfigPath);\n\n if (bunfigExists) {\n const bunfigContents = await fs.readFile(bunfigPath, 'utf-8');\n // check if `env = false` is already set (allowing for whitespace variations)\n if (!/^\\s*env\\s*=\\s*false\\s*$/m.test(bunfigContents)) {\n await fs.writeFile(bunfigPath, `env = false\\n${bunfigContents}`);\n logLines([\n '',\n `✅ Added ${ansis.bold('env = false')} to your existing ${fmt.fileName('bunfig.toml')}`,\n ansis.dim('This disables Bun\\'s automatic .env loading, which conflicts with Varlock.'),\n ansis.dim(`See ${ansis.underline('https://varlock.dev/integrations/bun')} for more info.`),\n ]);\n }\n } else {\n await fs.writeFile(bunfigPath, 'env = false\\n');\n logLines([\n '',\n `✅ Created ${fmt.fileName('bunfig.toml')} with ${ansis.bold('env = false')}`,\n ansis.dim('This disables Bun\\'s automatic .env loading, which conflicts with Varlock.'),\n ansis.dim(`See ${ansis.underline('https://varlock.dev/integrations/bun')} for more info.`),\n ]);\n }\n }\n};\n"]}