trustlocal 0.1.4 → 0.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 (44) hide show
  1. package/README.md +97 -58
  2. package/dist/commands/doctor.d.ts +8 -0
  3. package/dist/commands/doctor.d.ts.map +1 -0
  4. package/dist/commands/doctor.js +200 -0
  5. package/dist/commands/doctor.js.map +1 -0
  6. package/dist/commands/init.d.ts.map +1 -1
  7. package/dist/commands/init.js +54 -25
  8. package/dist/commands/init.js.map +1 -1
  9. package/dist/commands/remove.d.ts +17 -0
  10. package/dist/commands/remove.d.ts.map +1 -0
  11. package/dist/commands/remove.js +216 -0
  12. package/dist/commands/remove.js.map +1 -0
  13. package/dist/commands/status.d.ts.map +1 -1
  14. package/dist/commands/status.js +12 -3
  15. package/dist/commands/status.js.map +1 -1
  16. package/dist/commands/sync.d.ts.map +1 -1
  17. package/dist/commands/sync.js +33 -0
  18. package/dist/commands/sync.js.map +1 -1
  19. package/dist/detector/framework.d.ts +1 -1
  20. package/dist/detector/framework.d.ts.map +1 -1
  21. package/dist/detector/framework.js +47 -0
  22. package/dist/detector/framework.js.map +1 -1
  23. package/dist/index.js +20 -0
  24. package/dist/index.js.map +1 -1
  25. package/dist/injectors/astro.d.ts +6 -0
  26. package/dist/injectors/astro.d.ts.map +1 -0
  27. package/dist/injectors/astro.js +58 -0
  28. package/dist/injectors/astro.js.map +1 -0
  29. package/dist/injectors/fastify.d.ts +5 -0
  30. package/dist/injectors/fastify.d.ts.map +1 -0
  31. package/dist/injectors/fastify.js +42 -0
  32. package/dist/injectors/fastify.js.map +1 -0
  33. package/dist/injectors/nestjs.d.ts +5 -0
  34. package/dist/injectors/nestjs.d.ts.map +1 -0
  35. package/dist/injectors/nestjs.js +43 -0
  36. package/dist/injectors/nestjs.js.map +1 -0
  37. package/dist/injectors/nuxt.d.ts +8 -0
  38. package/dist/injectors/nuxt.d.ts.map +1 -0
  39. package/dist/injectors/nuxt.js +94 -0
  40. package/dist/injectors/nuxt.js.map +1 -0
  41. package/dist/mkcert/check.d.ts.map +1 -1
  42. package/dist/mkcert/check.js +32 -0
  43. package/dist/mkcert/check.js.map +1 -1
  44. package/package.json +9 -2
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.INJECTION_MARKER = exports.ENV_KEY = void 0;
4
+ exports.injectFastify = injectFastify;
5
+ exports.printFastifySnippet = printFastifySnippet;
6
+ /**
7
+ * Fastify injector
8
+ * Does NOT modify the server file — too risky, too variable.
9
+ * Sets NODE_EXTRA_CA_CERTS in .env and prints a code snippet.
10
+ */
11
+ const promises_1 = require("fs/promises");
12
+ const logger_1 = require("../utils/logger");
13
+ exports.ENV_KEY = 'NODE_EXTRA_CA_CERTS';
14
+ exports.INJECTION_MARKER = '# trustlocal:NODE_EXTRA_CA_CERTS';
15
+ async function injectFastify(envPath, caRootPem) {
16
+ let content = '';
17
+ try {
18
+ content = await (0, promises_1.readFile)(envPath, 'utf-8');
19
+ }
20
+ catch { /* .env doesn't exist */ }
21
+ if (content.includes(exports.INJECTION_MARKER) || content.includes(`${exports.ENV_KEY}=`)) {
22
+ return false;
23
+ }
24
+ const line = `${exports.INJECTION_MARKER}\n${exports.ENV_KEY}=${caRootPem}\n`;
25
+ const newContent = content ? `${content.trimEnd()}\n\n${line}` : line;
26
+ await (0, promises_1.writeFile)(envPath, newContent, 'utf-8');
27
+ return true;
28
+ }
29
+ function printFastifySnippet(certDir) {
30
+ logger_1.logger.blank();
31
+ logger_1.logger.info('Add HTTPS to your Fastify server:');
32
+ logger_1.logger.blank();
33
+ logger_1.logger.info(" const fs = require('fs');");
34
+ logger_1.logger.info(" const fastify = require('fastify')({");
35
+ logger_1.logger.info(' https: {');
36
+ logger_1.logger.info(` key: fs.readFileSync('${certDir}/localhost-key.pem'),`);
37
+ logger_1.logger.info(` cert: fs.readFileSync('${certDir}/localhost.pem'),`);
38
+ logger_1.logger.info(' },');
39
+ logger_1.logger.info(' });');
40
+ logger_1.logger.blank();
41
+ }
42
+ //# sourceMappingURL=fastify.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fastify.js","sourceRoot":"","sources":["../../src/injectors/fastify.ts"],"names":[],"mappings":";;;AAWA,sCAcC;AAED,kDAYC;AAvCD;;;;GAIG;AACH,0CAAkD;AAClD,4CAAyC;AAE5B,QAAA,OAAO,GAAG,qBAAqB,CAAC;AAChC,QAAA,gBAAgB,GAAG,kCAAkC,CAAC;AAE5D,KAAK,UAAU,aAAa,CAAC,OAAe,EAAE,SAAiB;IACpE,IAAI,OAAO,GAAG,EAAE,CAAC;IACjB,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,IAAA,mBAAQ,EAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC7C,CAAC;IAAC,MAAM,CAAC,CAAC,wBAAwB,CAAC,CAAC;IAEpC,IAAI,OAAO,CAAC,QAAQ,CAAC,wBAAgB,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,eAAO,GAAG,CAAC,EAAE,CAAC;QAC1E,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,IAAI,GAAG,GAAG,wBAAgB,KAAK,eAAO,IAAI,SAAS,IAAI,CAAC;IAC9D,MAAM,UAAU,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,OAAO,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IACtE,MAAM,IAAA,oBAAS,EAAC,OAAO,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;IAC9C,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAgB,mBAAmB,CAAC,OAAe;IACjD,eAAM,CAAC,KAAK,EAAE,CAAC;IACf,eAAM,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;IACjD,eAAM,CAAC,KAAK,EAAE,CAAC;IACf,eAAM,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;IAChD,eAAM,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;IACtD,eAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAC5B,eAAM,CAAC,IAAI,CAAC,gCAAgC,OAAO,uBAAuB,CAAC,CAAC;IAC5E,eAAM,CAAC,IAAI,CAAC,gCAAgC,OAAO,mBAAmB,CAAC,CAAC;IACxE,eAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACtB,eAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACrB,eAAM,CAAC,KAAK,EAAE,CAAC;AACjB,CAAC"}
@@ -0,0 +1,5 @@
1
+ export declare const ENV_KEY = "NODE_EXTRA_CA_CERTS";
2
+ export declare const INJECTION_MARKER = "# trustlocal:NODE_EXTRA_CA_CERTS";
3
+ export declare function injectNestjs(envPath: string, caRootPem: string): Promise<boolean>;
4
+ export declare function printNestjsSnippet(certDir: string): void;
5
+ //# sourceMappingURL=nestjs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nestjs.d.ts","sourceRoot":"","sources":["../../src/injectors/nestjs.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,OAAO,wBAAwB,CAAC;AAC7C,eAAO,MAAM,gBAAgB,qCAAqC,CAAC;AAEnE,wBAAsB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAcvF;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAaxD"}
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.INJECTION_MARKER = exports.ENV_KEY = void 0;
4
+ exports.injectNestjs = injectNestjs;
5
+ exports.printNestjsSnippet = printNestjsSnippet;
6
+ /**
7
+ * NestJS injector
8
+ * Does NOT modify main.ts — too risky.
9
+ * Sets NODE_EXTRA_CA_CERTS in .env and prints a code snippet.
10
+ */
11
+ const promises_1 = require("fs/promises");
12
+ const logger_1 = require("../utils/logger");
13
+ exports.ENV_KEY = 'NODE_EXTRA_CA_CERTS';
14
+ exports.INJECTION_MARKER = '# trustlocal:NODE_EXTRA_CA_CERTS';
15
+ async function injectNestjs(envPath, caRootPem) {
16
+ let content = '';
17
+ try {
18
+ content = await (0, promises_1.readFile)(envPath, 'utf-8');
19
+ }
20
+ catch { /* .env doesn't exist */ }
21
+ if (content.includes(exports.INJECTION_MARKER) || content.includes(`${exports.ENV_KEY}=`)) {
22
+ return false;
23
+ }
24
+ const line = `${exports.INJECTION_MARKER}\n${exports.ENV_KEY}=${caRootPem}\n`;
25
+ const newContent = content ? `${content.trimEnd()}\n\n${line}` : line;
26
+ await (0, promises_1.writeFile)(envPath, newContent, 'utf-8');
27
+ return true;
28
+ }
29
+ function printNestjsSnippet(certDir) {
30
+ logger_1.logger.blank();
31
+ logger_1.logger.info('Add HTTPS to your NestJS app (src/main.ts):');
32
+ logger_1.logger.blank();
33
+ logger_1.logger.info(" import * as fs from 'fs';");
34
+ logger_1.logger.info('');
35
+ logger_1.logger.info(' const httpsOptions = {');
36
+ logger_1.logger.info(` key: fs.readFileSync('${certDir}/localhost-key.pem'),`);
37
+ logger_1.logger.info(` cert: fs.readFileSync('${certDir}/localhost.pem'),`);
38
+ logger_1.logger.info(' };');
39
+ logger_1.logger.blank();
40
+ logger_1.logger.info(' const app = await NestFactory.create(AppModule, { httpsOptions });');
41
+ logger_1.logger.blank();
42
+ }
43
+ //# sourceMappingURL=nestjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nestjs.js","sourceRoot":"","sources":["../../src/injectors/nestjs.ts"],"names":[],"mappings":";;;AAWA,oCAcC;AAED,gDAaC;AAxCD;;;;GAIG;AACH,0CAAkD;AAClD,4CAAyC;AAE5B,QAAA,OAAO,GAAG,qBAAqB,CAAC;AAChC,QAAA,gBAAgB,GAAG,kCAAkC,CAAC;AAE5D,KAAK,UAAU,YAAY,CAAC,OAAe,EAAE,SAAiB;IACnE,IAAI,OAAO,GAAG,EAAE,CAAC;IACjB,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,IAAA,mBAAQ,EAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC7C,CAAC;IAAC,MAAM,CAAC,CAAC,wBAAwB,CAAC,CAAC;IAEpC,IAAI,OAAO,CAAC,QAAQ,CAAC,wBAAgB,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,eAAO,GAAG,CAAC,EAAE,CAAC;QAC1E,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,IAAI,GAAG,GAAG,wBAAgB,KAAK,eAAO,IAAI,SAAS,IAAI,CAAC;IAC9D,MAAM,UAAU,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,OAAO,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IACtE,MAAM,IAAA,oBAAS,EAAC,OAAO,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;IAC9C,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAgB,kBAAkB,CAAC,OAAe;IAChD,eAAM,CAAC,KAAK,EAAE,CAAC;IACf,eAAM,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;IAC3D,eAAM,CAAC,KAAK,EAAE,CAAC;IACf,eAAM,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;IAC3C,eAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAChB,eAAM,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;IACxC,eAAM,CAAC,IAAI,CAAC,8BAA8B,OAAO,uBAAuB,CAAC,CAAC;IAC1E,eAAM,CAAC,IAAI,CAAC,8BAA8B,OAAO,mBAAmB,CAAC,CAAC;IACtE,eAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACpB,eAAM,CAAC,KAAK,EAAE,CAAC;IACf,eAAM,CAAC,IAAI,CAAC,sEAAsE,CAAC,CAAC;IACpF,eAAM,CAAC,KAAK,EAAE,CAAC;AACjB,CAAC"}
@@ -0,0 +1,8 @@
1
+ export declare const INJECTION_MARKER = "// trustlocal:https";
2
+ export interface InjectResult {
3
+ alreadyConfigured: boolean;
4
+ created: boolean;
5
+ }
6
+ export declare function injectIntoSource(source: string): string | null;
7
+ export declare function injectNuxt(configPath: string): Promise<InjectResult>;
8
+ //# sourceMappingURL=nuxt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nuxt.d.ts","sourceRoot":"","sources":["../../src/injectors/nuxt.ts"],"names":[],"mappings":"AASA,eAAO,MAAM,gBAAgB,wBAAwB,CAAC;AA4BtD,MAAM,WAAW,YAAY;IAC3B,iBAAiB,EAAE,OAAO,CAAC;IAC3B,OAAO,EAAE,OAAO,CAAC;CAClB;AAUD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAkB9D;AAED,wBAAsB,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CA+B1E"}
@@ -0,0 +1,94 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.INJECTION_MARKER = void 0;
4
+ exports.injectIntoSource = injectIntoSource;
5
+ exports.injectNuxt = injectNuxt;
6
+ /**
7
+ * Nuxt injector
8
+ * Injects devServer.https into nuxt.config.ts using AST-based insertion.
9
+ * Nuxt devServer.https accepts file paths as strings (not Buffer/stream).
10
+ */
11
+ const promises_1 = require("fs/promises");
12
+ const backup_1 = require("../utils/backup");
13
+ const astHelper_1 = require("./astHelper");
14
+ exports.INJECTION_MARKER = '// trustlocal:https';
15
+ const CERT_DIR = '.trustlocal';
16
+ function buildDevServerBlock(indent) {
17
+ return `
18
+ ${indent}${exports.INJECTION_MARKER}
19
+ ${indent}devServer: {
20
+ ${indent} https: {
21
+ ${indent} key: '${CERT_DIR}/localhost-key.pem',
22
+ ${indent} cert: '${CERT_DIR}/localhost.pem',
23
+ ${indent} },
24
+ ${indent}},`;
25
+ }
26
+ function buildNewConfigFile() {
27
+ return `${exports.INJECTION_MARKER}
28
+ // https://nuxt.com/docs/api/configuration/nuxt-config
29
+ export default defineNuxtConfig({
30
+ devServer: {
31
+ https: {
32
+ key: '${CERT_DIR}/localhost-key.pem',
33
+ cert: '${CERT_DIR}/localhost.pem',
34
+ },
35
+ },
36
+ });
37
+ `;
38
+ }
39
+ function detectIndent(source, configObj) {
40
+ if (configObj.start === null || configObj.start === undefined)
41
+ return ' ';
42
+ const bracePos = source.indexOf('{', configObj.start);
43
+ const afterBrace = source.slice(bracePos + 1);
44
+ const nextLineMatch = /\n(\s+)/.exec(afterBrace);
45
+ return nextLineMatch?.[1] ?? ' ';
46
+ }
47
+ function injectIntoSource(source) {
48
+ let ast;
49
+ try {
50
+ ast = (0, astHelper_1.parseSource)(source);
51
+ }
52
+ catch {
53
+ return null;
54
+ }
55
+ const configObj = (0, astHelper_1.findTopLevelConfigObject)(ast);
56
+ if (!configObj)
57
+ return null;
58
+ const insertPos = (0, astHelper_1.getObjectOpenBraceEnd)(configObj, source);
59
+ if (insertPos < 0)
60
+ return null;
61
+ const indent = detectIndent(source, configObj);
62
+ const block = buildDevServerBlock(indent);
63
+ return source.slice(0, insertPos) + block + source.slice(insertPos);
64
+ }
65
+ async function injectNuxt(configPath) {
66
+ let content;
67
+ try {
68
+ content = await (0, promises_1.readFile)(configPath, 'utf-8');
69
+ }
70
+ catch {
71
+ await (0, promises_1.writeFile)(configPath, buildNewConfigFile(), 'utf-8');
72
+ return { alreadyConfigured: false, created: true };
73
+ }
74
+ if (content.includes(exports.INJECTION_MARKER)) {
75
+ return { alreadyConfigured: true, created: false };
76
+ }
77
+ try {
78
+ const ast = (0, astHelper_1.parseSource)(content);
79
+ const configObj = (0, astHelper_1.findTopLevelConfigObject)(ast);
80
+ if (configObj && (0, astHelper_1.hasNestedProperty)(configObj, ['devServer', 'https'])) {
81
+ return { alreadyConfigured: true, created: false };
82
+ }
83
+ }
84
+ catch { /* proceed */ }
85
+ await (0, backup_1.backupFile)(configPath);
86
+ const injected = injectIntoSource(content);
87
+ if (!injected) {
88
+ throw new Error(`trustlocal could not locate the config object in ${configPath}.\n` +
89
+ 'Please add the devServer.https block manually.');
90
+ }
91
+ await (0, promises_1.writeFile)(configPath, injected, 'utf-8');
92
+ return { alreadyConfigured: false, created: false };
93
+ }
94
+ //# sourceMappingURL=nuxt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nuxt.js","sourceRoot":"","sources":["../../src/injectors/nuxt.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../src/mkcert/check.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AA0BD,2EAA2E;AAC3E,wBAAgB,WAAW,IAAI,UAAU,CAiBxC;AAED;;;GAGG;AACH,wBAAgB,eAAe,IAAI,MAAM,CAUxC"}
1
+ {"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../src/mkcert/check.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AA2DD,2EAA2E;AAC3E,wBAAgB,WAAW,IAAI,UAAU,CAmBxC;AAED;;;GAGG;AACH,wBAAgB,eAAe,IAAI,MAAM,CAWxC"}
@@ -27,8 +27,39 @@ function prependTrustlocalBin() {
27
27
  process.env['PATH'] = `${dir}${sep}${current}`;
28
28
  }
29
29
  }
30
+ /**
31
+ * On Windows, read PATH from both HKLM and HKCU registry keys and merge into
32
+ * the current process environment. This is necessary because winget, choco,
33
+ * and scoop update the registry PATH — but a new process inheriting from an
34
+ * older parent process will not see those changes without this refresh.
35
+ */
36
+ function refreshWindowsPath() {
37
+ if ((0, os_1.platform)() !== 'win32')
38
+ return;
39
+ const readReg = (key, value) => {
40
+ try {
41
+ const out = (0, child_process_1.execSync)(`reg query "${key}" /v ${value}`, {
42
+ encoding: 'utf-8',
43
+ stdio: 'pipe',
44
+ });
45
+ const match = new RegExp(`${value}\\s+REG(?:_EXPAND)?_SZ\\s+(.+)`).exec(out);
46
+ return match?.[1]?.trim() ?? '';
47
+ }
48
+ catch {
49
+ return '';
50
+ }
51
+ };
52
+ const systemPath = readReg('HKLM\\SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Environment', 'Path');
53
+ const userPath = readReg('HKCU\\Environment', 'Path');
54
+ const merged = [systemPath, userPath, process.env['PATH'] ?? '']
55
+ .filter(Boolean)
56
+ .join(';');
57
+ process.env['PATH'] = merged;
58
+ }
30
59
  /** Check whether mkcert is installed and return version + CA root path. */
31
60
  function checkMkcert() {
61
+ // On Windows, pull registry PATH so winget/choco/scoop installs are visible
62
+ refreshWindowsPath();
32
63
  // Ensure any binary trustlocal previously downloaded is discoverable
33
64
  prependTrustlocalBin();
34
65
  try {
@@ -51,6 +82,7 @@ function checkMkcert() {
51
82
  * Throws if mkcert is not installed.
52
83
  */
53
84
  function getMkcertCARoot() {
85
+ refreshWindowsPath();
54
86
  prependTrustlocalBin();
55
87
  try {
56
88
  return (0, child_process_1.execSync)('mkcert -CAROOT', {
@@ -1 +1 @@
1
- {"version":3,"file":"check.js","sourceRoot":"","sources":["../../src/mkcert/check.ts"],"names":[],"mappings":";;AAmCA,kCAiBC;AAMD,0CAUC;AApED,iDAAyC;AACzC,+BAA4B;AAC5B,2BAAuC;AAQvC;;;GAGG;AACH,SAAS,gBAAgB;IACvB,OAAO,IAAA,aAAQ,GAAE,KAAK,OAAO;QAC3B,CAAC,CAAC,IAAA,WAAI,EAAC,IAAA,YAAO,GAAE,EAAE,aAAa,EAAE,KAAK,CAAC;QACvC,CAAC,CAAC,IAAA,WAAI,EAAC,IAAA,YAAO,GAAE,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;AACvC,CAAC;AAED;;;;GAIG;AACH,SAAS,oBAAoB;IAC3B,MAAM,GAAG,GAAG,gBAAgB,EAAE,CAAC;IAC/B,MAAM,GAAG,GAAG,IAAA,aAAQ,GAAE,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;IAC/C,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IAC1C,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC3B,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,OAAO,EAAE,CAAC;IACjD,CAAC;AACH,CAAC;AAED,2EAA2E;AAC3E,SAAgB,WAAW;IACzB,qEAAqE;IACrE,oBAAoB,EAAE,CAAC;IAEvB,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,IAAA,wBAAQ,EAAC,kBAAkB,EAAE;YAC3C,QAAQ,EAAE,OAAO;YACjB,KAAK,EAAE,MAAM;SACd,CAAC,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,MAAM,GAAG,IAAA,wBAAQ,EAAC,gBAAgB,EAAE;YACxC,QAAQ,EAAE,OAAO;YACjB,KAAK,EAAE,MAAM;SACd,CAAC,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;IAC9C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;IAC9B,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAgB,eAAe;IAC7B,oBAAoB,EAAE,CAAC;IACvB,IAAI,CAAC;QACH,OAAO,IAAA,wBAAQ,EAAC,gBAAgB,EAAE;YAChC,QAAQ,EAAE,OAAO;YACjB,KAAK,EAAE,MAAM;SACd,CAAC,CAAC,IAAI,EAAE,CAAC;IACZ,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,kEAAkE,CAAC,CAAC;IACtF,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"check.js","sourceRoot":"","sources":["../../src/mkcert/check.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "trustlocal",
3
- "version": "0.1.4",
3
+ "version": "0.2.0",
4
4
  "description": "One command. HTTPS everywhere. Zero config.",
5
5
  "main": "dist/index.js",
6
6
  "bin": {
@@ -37,10 +37,17 @@
37
37
  "keywords": [
38
38
  "https",
39
39
  "ssl",
40
+ "tls",
40
41
  "localhost",
41
42
  "mkcert",
42
43
  "developer-tools",
43
- "certificates"
44
+ "certificates",
45
+ "nextjs",
46
+ "vite",
47
+ "astro",
48
+ "sveltekit",
49
+ "nuxt",
50
+ "remix"
44
51
  ],
45
52
  "license": "MIT",
46
53
  "engines": {