trustlocal 0.1.1 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1,24 +1,36 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Next.js injector
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
4
|
+
* Next.js 15+ removed `experimental.https` from next.config.
|
|
5
|
+
* The correct approach is to patch the `dev` script in package.json
|
|
6
|
+
* to use `--experimental-https` with explicit cert paths, and set
|
|
7
|
+
* NODE_EXTRA_CA_CERTS so Node trusts the local CA.
|
|
8
|
+
*
|
|
9
|
+
* For Next.js < 15 (detected by next version in package.json),
|
|
10
|
+
* we fall back to injecting `experimental.https` into next.config.
|
|
6
11
|
*/
|
|
7
12
|
export declare const INJECTION_MARKER = "// trustlocal:https";
|
|
13
|
+
export declare const PKG_INJECTION_MARKER = "trustlocal:https";
|
|
8
14
|
export interface InjectResult {
|
|
9
15
|
alreadyConfigured: boolean;
|
|
10
16
|
created: boolean;
|
|
17
|
+
method: 'package-json-flag' | 'experimental-config' | 'already-done';
|
|
11
18
|
}
|
|
12
19
|
/**
|
|
13
|
-
* Inject HTTPS
|
|
14
|
-
*
|
|
15
|
-
|
|
20
|
+
* Inject HTTPS into package.json dev script (Next.js 15+ approach).
|
|
21
|
+
* Adds --experimental-https --experimental-https-key and --experimental-https-cert flags.
|
|
22
|
+
*/
|
|
23
|
+
export declare function injectPackageJsonScript(pkgPath: string): Promise<InjectResult>;
|
|
24
|
+
/**
|
|
25
|
+
* Inject HTTPS config into a Next.js config file (Next.js < 15 approach).
|
|
26
|
+
* Uses the experimental.https block.
|
|
16
27
|
*/
|
|
17
|
-
export declare function
|
|
28
|
+
export declare function injectNextjsConfig(configPath: string): Promise<InjectResult>;
|
|
18
29
|
/**
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
30
|
+
* Main entry point. Detects Next.js version and uses the right strategy:
|
|
31
|
+
* - Next.js 15+: patch package.json dev script with --experimental-https flags
|
|
32
|
+
* - Next.js < 15: inject experimental.https into next.config.js/ts
|
|
22
33
|
*/
|
|
34
|
+
export declare function injectNextjs(configPath: string, projectRoot?: string): Promise<InjectResult>;
|
|
23
35
|
export declare function injectIntoSource(source: string): string | null;
|
|
24
36
|
//# sourceMappingURL=nextjs.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nextjs.d.ts","sourceRoot":"","sources":["../../src/injectors/nextjs.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"nextjs.d.ts","sourceRoot":"","sources":["../../src/injectors/nextjs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAMH,eAAO,MAAM,gBAAgB,wBAAwB,CAAC;AACtD,eAAO,MAAM,oBAAoB,qBAAqB,CAAC;AAIvD,MAAM,WAAW,YAAY;IAC3B,iBAAiB,EAAE,OAAO,CAAC;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,mBAAmB,GAAG,qBAAqB,GAAG,cAAc,CAAC;CACtE;AAkBD;;;GAGG;AACH,wBAAsB,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAqCpF;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CA6BlF;AAED;;;;GAIG;AACH,wBAAsB,YAAY,CAChC,UAAU,EAAE,MAAM,EAClB,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,YAAY,CAAC,CAYvB;AAoBD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAW9D"}
|
package/dist/injectors/nextjs.js
CHANGED
|
@@ -2,114 +2,158 @@
|
|
|
2
2
|
/**
|
|
3
3
|
* Next.js injector
|
|
4
4
|
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
5
|
+
* Next.js 15+ removed `experimental.https` from next.config.
|
|
6
|
+
* The correct approach is to patch the `dev` script in package.json
|
|
7
|
+
* to use `--experimental-https` with explicit cert paths, and set
|
|
8
|
+
* NODE_EXTRA_CA_CERTS so Node trusts the local CA.
|
|
9
|
+
*
|
|
10
|
+
* For Next.js < 15 (detected by next version in package.json),
|
|
11
|
+
* we fall back to injecting `experimental.https` into next.config.
|
|
7
12
|
*/
|
|
8
13
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
-
exports.INJECTION_MARKER = void 0;
|
|
14
|
+
exports.PKG_INJECTION_MARKER = exports.INJECTION_MARKER = void 0;
|
|
15
|
+
exports.injectPackageJsonScript = injectPackageJsonScript;
|
|
16
|
+
exports.injectNextjsConfig = injectNextjsConfig;
|
|
10
17
|
exports.injectNextjs = injectNextjs;
|
|
11
18
|
exports.injectIntoSource = injectIntoSource;
|
|
12
19
|
const promises_1 = require("fs/promises");
|
|
20
|
+
const path_1 = require("path");
|
|
13
21
|
const backup_1 = require("../utils/backup");
|
|
14
|
-
const astHelper_1 = require("./astHelper");
|
|
15
22
|
exports.INJECTION_MARKER = '// trustlocal:https';
|
|
23
|
+
exports.PKG_INJECTION_MARKER = 'trustlocal:https';
|
|
16
24
|
const CERT_DIR = '.trustlocal';
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
25
|
+
/**
|
|
26
|
+
* Detect the major version of Next.js installed in the project.
|
|
27
|
+
* Returns the major version number, or null if it can't be determined.
|
|
28
|
+
*/
|
|
29
|
+
async function detectNextVersion(projectRoot) {
|
|
30
|
+
try {
|
|
31
|
+
const pkgPath = (0, path_1.join)(projectRoot, 'node_modules', 'next', 'package.json');
|
|
32
|
+
const content = await (0, promises_1.readFile)(pkgPath, 'utf-8');
|
|
33
|
+
const pkg = JSON.parse(content);
|
|
34
|
+
const major = parseInt(pkg.version?.split('.')[0] ?? '', 10);
|
|
35
|
+
return isNaN(major) ? null : major;
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
return null;
|
|
39
|
+
}
|
|
26
40
|
}
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
};
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
+
/**
|
|
42
|
+
* Inject HTTPS into package.json dev script (Next.js 15+ approach).
|
|
43
|
+
* Adds --experimental-https --experimental-https-key and --experimental-https-cert flags.
|
|
44
|
+
*/
|
|
45
|
+
async function injectPackageJsonScript(pkgPath) {
|
|
46
|
+
let content;
|
|
47
|
+
try {
|
|
48
|
+
content = await (0, promises_1.readFile)(pkgPath, 'utf-8');
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
return { alreadyConfigured: false, created: false, method: 'already-done' };
|
|
52
|
+
}
|
|
53
|
+
if (content.includes(exports.PKG_INJECTION_MARKER)) {
|
|
54
|
+
return { alreadyConfigured: true, created: false, method: 'already-done' };
|
|
55
|
+
}
|
|
56
|
+
const pkg = JSON.parse(content);
|
|
57
|
+
if (!pkg.scripts) {
|
|
58
|
+
pkg.scripts = {};
|
|
59
|
+
}
|
|
60
|
+
const devScript = pkg.scripts['dev'] ?? 'next dev';
|
|
61
|
+
// Already has the flag
|
|
62
|
+
if (devScript.includes('--experimental-https')) {
|
|
63
|
+
return { alreadyConfigured: true, created: false, method: 'already-done' };
|
|
64
|
+
}
|
|
65
|
+
// Append HTTPS flags to the dev script
|
|
66
|
+
const certKey = `${CERT_DIR}/localhost-key.pem`;
|
|
67
|
+
const certPem = `${CERT_DIR}/localhost.pem`;
|
|
68
|
+
pkg.scripts['dev'] =
|
|
69
|
+
`${devScript} --experimental-https --experimental-https-key ${certKey} --experimental-https-cert ${certPem}`;
|
|
70
|
+
await (0, backup_1.backupFile)(pkgPath);
|
|
71
|
+
await (0, promises_1.writeFile)(pkgPath, JSON.stringify(pkg, null, 2) + '\n', 'utf-8');
|
|
72
|
+
return { alreadyConfigured: false, created: false, method: 'package-json-flag' };
|
|
41
73
|
}
|
|
42
74
|
/**
|
|
43
|
-
* Inject HTTPS config into a Next.js config file.
|
|
44
|
-
*
|
|
45
|
-
* Idempotent — safe to call multiple times.
|
|
75
|
+
* Inject HTTPS config into a Next.js config file (Next.js < 15 approach).
|
|
76
|
+
* Uses the experimental.https block.
|
|
46
77
|
*/
|
|
47
|
-
async function
|
|
78
|
+
async function injectNextjsConfig(configPath) {
|
|
48
79
|
let content;
|
|
49
|
-
// ── File does not exist → create it ──────────────────────────────────────
|
|
50
80
|
try {
|
|
51
81
|
content = await (0, promises_1.readFile)(configPath, 'utf-8');
|
|
52
82
|
}
|
|
53
83
|
catch {
|
|
54
84
|
await (0, promises_1.writeFile)(configPath, buildNewConfigFile(), 'utf-8');
|
|
55
|
-
return { alreadyConfigured: false, created: true };
|
|
85
|
+
return { alreadyConfigured: false, created: true, method: 'experimental-config' };
|
|
56
86
|
}
|
|
57
|
-
// ── Already injected (idempotency check) ──────────────────────────────────
|
|
58
87
|
if (content.includes(exports.INJECTION_MARKER)) {
|
|
59
|
-
return { alreadyConfigured: true, created: false };
|
|
88
|
+
return { alreadyConfigured: true, created: false, method: 'already-done' };
|
|
60
89
|
}
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
const ast = (0, astHelper_1.parseSource)(content);
|
|
64
|
-
const configObj = (0, astHelper_1.findTopLevelConfigObject)(ast);
|
|
65
|
-
if (configObj && (0, astHelper_1.hasNestedProperty)(configObj, ['experimental', 'https'])) {
|
|
66
|
-
return { alreadyConfigured: true, created: false };
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
catch {
|
|
70
|
-
// If parse fails, proceed cautiously — the regex below will still guard us
|
|
90
|
+
if (/experimental\s*:\s*\{[^}]*https\s*:/.test(content)) {
|
|
91
|
+
return { alreadyConfigured: true, created: false, method: 'already-done' };
|
|
71
92
|
}
|
|
72
|
-
// ── Back up before mutating ───────────────────────────────────────────────
|
|
73
93
|
await (0, backup_1.backupFile)(configPath);
|
|
74
|
-
// ── AST-based injection ───────────────────────────────────────────────────
|
|
75
94
|
const injected = injectIntoSource(content);
|
|
76
95
|
if (!injected) {
|
|
77
96
|
throw new Error(`trustlocal could not locate the config object in ${configPath}.\n` +
|
|
78
97
|
'Please add the experimental.https block manually.');
|
|
79
98
|
}
|
|
80
99
|
await (0, promises_1.writeFile)(configPath, injected, 'utf-8');
|
|
81
|
-
return { alreadyConfigured: false, created: false };
|
|
100
|
+
return { alreadyConfigured: false, created: false, method: 'experimental-config' };
|
|
82
101
|
}
|
|
83
102
|
/**
|
|
84
|
-
*
|
|
85
|
-
*
|
|
86
|
-
*
|
|
103
|
+
* Main entry point. Detects Next.js version and uses the right strategy:
|
|
104
|
+
* - Next.js 15+: patch package.json dev script with --experimental-https flags
|
|
105
|
+
* - Next.js < 15: inject experimental.https into next.config.js/ts
|
|
87
106
|
*/
|
|
88
|
-
function
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
return
|
|
107
|
+
async function injectNextjs(configPath, projectRoot) {
|
|
108
|
+
const root = projectRoot ?? (0, path_1.join)(configPath, '..');
|
|
109
|
+
const nextMajor = await detectNextVersion(root);
|
|
110
|
+
// Next.js 15+ — use CLI flag approach
|
|
111
|
+
if (nextMajor === null || nextMajor >= 15) {
|
|
112
|
+
const pkgPath = (0, path_1.join)(root, 'package.json');
|
|
113
|
+
return injectPackageJsonScript(pkgPath);
|
|
95
114
|
}
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
115
|
+
// Next.js < 15 — use experimental.https config
|
|
116
|
+
return injectNextjsConfig(configPath);
|
|
117
|
+
}
|
|
118
|
+
// ── Legacy helpers kept for the < 15 path ────────────────────────────────────
|
|
119
|
+
function buildNewConfigFile() {
|
|
120
|
+
return `${exports.INJECTION_MARKER}
|
|
121
|
+
/** @type {import('next').NextConfig} */
|
|
122
|
+
const nextConfig = {
|
|
123
|
+
experimental: {
|
|
124
|
+
https: {
|
|
125
|
+
key: '${CERT_DIR}/localhost-key.pem',
|
|
126
|
+
cert: '${CERT_DIR}/localhost.pem',
|
|
127
|
+
},
|
|
128
|
+
},
|
|
129
|
+
};
|
|
130
|
+
|
|
131
|
+
module.exports = nextConfig;
|
|
132
|
+
`;
|
|
133
|
+
}
|
|
134
|
+
function injectIntoSource(source) {
|
|
135
|
+
// Simple regex-based injection for the < 15 path
|
|
136
|
+
// Find the opening brace of the config object and insert after it
|
|
137
|
+
const configObjMatch = /(?:const|let|var)\s+\w+\s*(?::\s*\w+\s*)?\s*=\s*\{/.exec(source);
|
|
138
|
+
if (!configObjMatch)
|
|
101
139
|
return null;
|
|
102
|
-
|
|
103
|
-
const indent =
|
|
140
|
+
const insertPos = (configObjMatch.index ?? 0) + configObjMatch[0].length;
|
|
141
|
+
const indent = detectIndentFromSource(source, insertPos);
|
|
104
142
|
const block = buildHttpsBlock(indent);
|
|
105
143
|
return source.slice(0, insertPos) + block + source.slice(insertPos);
|
|
106
144
|
}
|
|
107
|
-
function
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
145
|
+
function buildHttpsBlock(indent) {
|
|
146
|
+
return `
|
|
147
|
+
${indent}${exports.INJECTION_MARKER}
|
|
148
|
+
${indent}experimental: {
|
|
149
|
+
${indent} https: {
|
|
150
|
+
${indent} key: '${CERT_DIR}/localhost-key.pem',
|
|
151
|
+
${indent} cert: '${CERT_DIR}/localhost.pem',
|
|
152
|
+
${indent} },
|
|
153
|
+
${indent}},`;
|
|
154
|
+
}
|
|
155
|
+
function detectIndentFromSource(source, afterPos) {
|
|
156
|
+
const afterBrace = source.slice(afterPos);
|
|
113
157
|
const nextLineMatch = /\n(\s+)/.exec(afterBrace);
|
|
114
158
|
return nextLineMatch?.[1] ?? ' ';
|
|
115
159
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nextjs.js","sourceRoot":"","sources":["../../src/injectors/nextjs.ts"],"names":[],"mappings":";AAAA
|
|
1
|
+
{"version":3,"file":"nextjs.js","sourceRoot":"","sources":["../../src/injectors/nextjs.ts"],"names":[],"mappings":"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"}
|