@c9up/ream 0.2.28 → 0.2.29
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.
- package/dist/Codemods.d.ts +16 -0
- package/dist/Codemods.d.ts.map +1 -1
- package/dist/Codemods.js +182 -0
- package/dist/Codemods.js.map +1 -1
- package/dist/Ignitor.d.ts +10 -2
- package/dist/Ignitor.d.ts.map +1 -1
- package/dist/Ignitor.js +21 -22
- package/dist/Ignitor.js.map +1 -1
- package/dist/bodyparser/BodyParserMiddleware.d.ts.map +1 -1
- package/dist/bodyparser/BodyParserMiddleware.js +3 -0
- package/dist/bodyparser/BodyParserMiddleware.js.map +1 -1
- package/dist/bodyparser/qsParse.d.ts +10 -1
- package/dist/bodyparser/qsParse.d.ts.map +1 -1
- package/dist/bodyparser/qsParse.js +53 -15
- package/dist/bodyparser/qsParse.js.map +1 -1
- package/dist/codemods/source.d.ts +57 -0
- package/dist/codemods/source.d.ts.map +1 -0
- package/dist/codemods/source.js +282 -0
- package/dist/codemods/source.js.map +1 -0
- package/dist/graphql/GraphQLEngine.d.ts.map +1 -1
- package/dist/graphql/GraphQLEngine.js +3 -2
- package/dist/graphql/GraphQLEngine.js.map +1 -1
- package/dist/http/Exception.d.ts +14 -1
- package/dist/http/Exception.d.ts.map +1 -1
- package/dist/http/Exception.js +10 -2
- package/dist/http/Exception.js.map +1 -1
- package/dist/http/HttpContext.d.ts +11 -0
- package/dist/http/HttpContext.d.ts.map +1 -1
- package/dist/http/HttpContext.js +2 -1
- package/dist/http/HttpContext.js.map +1 -1
- package/dist/http/RedirectBuilder.d.ts +9 -3
- package/dist/http/RedirectBuilder.d.ts.map +1 -1
- package/dist/http/RedirectBuilder.js +39 -37
- package/dist/http/RedirectBuilder.js.map +1 -1
- package/dist/http/Request.d.ts +42 -17
- package/dist/http/Request.d.ts.map +1 -1
- package/dist/http/Request.js +65 -29
- package/dist/http/Request.js.map +1 -1
- package/dist/http/SseStream.js +6 -7
- package/dist/http/SseStream.js.map +1 -1
- package/dist/http/permissions.d.ts +19 -0
- package/dist/http/permissions.d.ts.map +1 -0
- package/dist/http/permissions.js +28 -0
- package/dist/http/permissions.js.map +1 -0
- package/dist/http-client/HttpClient.d.ts +111 -0
- package/dist/http-client/HttpClient.d.ts.map +1 -0
- package/dist/http-client/HttpClient.js +386 -0
- package/dist/http-client/HttpClient.js.map +1 -0
- package/dist/http-client/addresses.d.ts +14 -0
- package/dist/http-client/addresses.d.ts.map +1 -0
- package/dist/http-client/addresses.js +57 -0
- package/dist/http-client/addresses.js.map +1 -0
- package/dist/http-client/fake.d.ts +50 -0
- package/dist/http-client/fake.d.ts.map +1 -0
- package/dist/http-client/fake.js +95 -0
- package/dist/http-client/fake.js.map +1 -0
- package/dist/http-client/index.d.ts +7 -0
- package/dist/http-client/index.d.ts.map +1 -0
- package/dist/http-client/index.js +7 -0
- package/dist/http-client/index.js.map +1 -0
- package/dist/index.d.ts +4 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/middleware/Pipeline.d.ts.map +1 -1
- package/dist/middleware/Pipeline.js +6 -3
- package/dist/middleware/Pipeline.js.map +1 -1
- package/dist/native/generated.d.ts +78 -7
- package/dist/native/generated.d.ts.map +1 -1
- package/dist/rpc/RpcProvider.d.ts +6 -0
- package/dist/rpc/RpcProvider.d.ts.map +1 -1
- package/dist/rpc/RpcProvider.js +4 -1
- package/dist/rpc/RpcProvider.js.map +1 -1
- package/dist/rpc/RpcRouter.d.ts +27 -14
- package/dist/rpc/RpcRouter.d.ts.map +1 -1
- package/dist/rpc/RpcRouter.js +95 -38
- package/dist/rpc/RpcRouter.js.map +1 -1
- package/dist/scheduler/locks/RedisLockBackend.d.ts.map +1 -1
- package/dist/scheduler/locks/RedisLockBackend.js +13 -2
- package/dist/scheduler/locks/RedisLockBackend.js.map +1 -1
- package/dist/security/CookieSigner.d.ts.map +1 -1
- package/dist/security/CookieSigner.js +17 -3
- package/dist/security/CookieSigner.js.map +1 -1
- package/dist/security/SignedUrl.d.ts.map +1 -1
- package/dist/security/SignedUrl.js +6 -1
- package/dist/security/SignedUrl.js.map +1 -1
- package/dist/server/Server.d.ts +41 -12
- package/dist/server/Server.d.ts.map +1 -1
- package/dist/server/Server.js +31 -10
- package/dist/server/Server.js.map +1 -1
- package/dist/server/nativeGrpc.d.ts +27 -0
- package/dist/server/nativeGrpc.d.ts.map +1 -0
- package/dist/server/nativeGrpc.js +47 -0
- package/dist/server/nativeGrpc.js.map +1 -0
- package/dist/server/nativeLimits.d.ts +49 -0
- package/dist/server/nativeLimits.d.ts.map +1 -0
- package/dist/server/nativeLimits.js +67 -0
- package/dist/server/nativeLimits.js.map +1 -0
- package/dist/session/Session.d.ts +12 -0
- package/dist/session/Session.d.ts.map +1 -1
- package/dist/session/Session.js.map +1 -1
- package/dist/session/SessionMiddleware.d.ts.map +1 -1
- package/dist/session/SessionMiddleware.js +28 -9
- package/dist/session/SessionMiddleware.js.map +1 -1
- package/dist/session/config.d.ts +5 -0
- package/dist/session/config.d.ts.map +1 -1
- package/dist/session/config.js +8 -0
- package/dist/session/config.js.map +1 -1
- package/dist/session/drivers/MemoryDriver.d.ts.map +1 -1
- package/dist/session/drivers/MemoryDriver.js +12 -5
- package/dist/session/drivers/MemoryDriver.js.map +1 -1
- package/dist/session/errors.d.ts +17 -0
- package/dist/session/errors.d.ts.map +1 -1
- package/dist/session/errors.js +21 -0
- package/dist/session/errors.js.map +1 -1
- package/dist/session/templateTags.d.ts +14 -0
- package/dist/session/templateTags.d.ts.map +1 -1
- package/dist/session/templateTags.js +45 -17
- package/dist/session/templateTags.js.map +1 -1
- package/dist/storage/StaticMiddleware.d.ts.map +1 -1
- package/dist/storage/StaticMiddleware.js +29 -18
- package/dist/storage/StaticMiddleware.js.map +1 -1
- package/events.darwin-arm64.node +0 -0
- package/events.darwin-x64.node +0 -0
- package/events.win32-x64-msvc.node +0 -0
- package/index.darwin-arm64.node +0 -0
- package/index.darwin-x64.node +0 -0
- package/index.linux-arm64-gnu.node +0 -0
- package/index.linux-x64-gnu.node +0 -0
- package/index.win32-x64-msvc.node +0 -0
- package/package.json +11 -2
- package/scheduler.darwin-arm64.node +0 -0
- package/scheduler.darwin-x64.node +0 -0
- package/scheduler.win32-x64-msvc.node +0 -0
- package/src/Codemods.ts +265 -0
- package/src/Ignitor.ts +37 -22
- package/src/bodyparser/BodyParserMiddleware.ts +3 -0
- package/src/bodyparser/qsParse.ts +69 -14
- package/src/codemods/source.ts +303 -0
- package/src/graphql/GraphQLEngine.ts +3 -2
- package/src/http/Exception.ts +17 -2
- package/src/http/HttpContext.ts +14 -1
- package/src/http/RedirectBuilder.ts +48 -37
- package/src/http/Request.ts +87 -29
- package/src/http/SseStream.ts +6 -7
- package/src/http/permissions.ts +31 -0
- package/src/http-client/HttpClient.ts +505 -0
- package/src/http-client/addresses.ts +58 -0
- package/src/http-client/fake.ts +141 -0
- package/src/http-client/index.ts +21 -0
- package/src/index.ts +5 -1
- package/src/middleware/Pipeline.ts +7 -3
- package/src/native/generated.ts +89 -7
- package/src/rpc/RpcProvider.ts +10 -1
- package/src/rpc/RpcRouter.ts +126 -42
- package/src/scheduler/locks/RedisLockBackend.ts +12 -4
- package/src/security/CookieSigner.ts +17 -3
- package/src/security/SignedUrl.ts +6 -1
- package/src/server/Server.ts +57 -12
- package/src/server/nativeGrpc.ts +59 -0
- package/src/server/nativeLimits.ts +94 -0
- package/src/session/Session.ts +16 -0
- package/src/session/SessionMiddleware.ts +30 -10
- package/src/session/config.ts +7 -0
- package/src/session/drivers/MemoryDriver.ts +11 -5
- package/src/session/errors.ts +31 -0
- package/src/session/templateTags.ts +57 -0
- package/src/storage/StaticMiddleware.ts +28 -18
|
@@ -39,4 +39,18 @@ export interface TemplateTagEngine {
|
|
|
39
39
|
* no store in scope and every tag renders nothing, rather than throwing.
|
|
40
40
|
*/
|
|
41
41
|
export declare function registerSessionTemplateTags(engine: TemplateTagEngine): void;
|
|
42
|
+
/** Loads the template engine package. Swappable so a test needs no engine. */
|
|
43
|
+
export type EnginePackageLoader = () => Promise<unknown>;
|
|
44
|
+
/**
|
|
45
|
+
* Publish the session tags into the template engine, the way AdonisJS's
|
|
46
|
+
* session does with Edge: through the engine package's MODULE SINGLETON
|
|
47
|
+
* (`inker.use(plugin)`), guarded by the host's `usingInker` flag — never by
|
|
48
|
+
* resolving a container binding. `use()` queues the plugin, and the engine
|
|
49
|
+
* runs it before its next render, whenever the engine was built.
|
|
50
|
+
*
|
|
51
|
+
* Returns whether the tags were handed over. A registrar or an engine of the
|
|
52
|
+
* wrong shape is an error, not a skip: a template using `@flashMessage`
|
|
53
|
+
* would otherwise render it as plain text with no warning.
|
|
54
|
+
*/
|
|
55
|
+
export declare function installSessionTemplateTags(usingInker: boolean, load?: EnginePackageLoader): Promise<boolean>;
|
|
42
56
|
//# sourceMappingURL=templateTags.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"templateTags.d.ts","sourceRoot":"","sources":["../../src/session/templateTags.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"templateTags.d.ts","sourceRoot":"","sources":["../../src/session/templateTags.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;GAgBG;AAEH,+DAA+D;AAC/D,MAAM,WAAW,iBAAiB;IAChC,WAAW,CAAC,GAAG,EAAE;QACf,OAAO,EAAE,MAAM,CAAA;QACf,KAAK,EAAE,OAAO,CAAA;QACd,QAAQ,EAAE,OAAO,CAAA;QACjB,OAAO,CACL,MAAM,EAAE,OAAO,EACf,MAAM,EAAE;YAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;SAAE,EACxC,KAAK,EAAE;YACL,UAAU,EAAE;gBAAE,KAAK,EAAE,MAAM,CAAA;aAAE,CAAA;YAC7B,UAAU,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;YAChF,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAA;SACtC,GACA,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;KACxB,GAAG,IAAI,CAAA;CACT;AAiBD;;;;;GAKG;AACH,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI,CAkE3E;AAED,8EAA8E;AAC9E,MAAM,MAAM,mBAAmB,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,CAAA;AAqBxD;;;;;;;;;;GAUG;AACH,wBAAsB,0BAA0B,CAC9C,UAAU,EAAE,OAAO,EACnB,IAAI,GAAE,mBAA+B,GACpC,OAAO,CAAC,OAAO,CAAC,CAiBlB"}
|
|
@@ -1,20 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
* The flash-message tags AdonisJS's session publishes to templates.
|
|
3
|
-
*
|
|
4
|
-
* A migrated template keeps writing:
|
|
5
|
-
*
|
|
6
|
-
* @error('email')<p>{{ $message }}</p>@enderror
|
|
7
|
-
* @errors<ul>@each(m in $messages)<li>{{ m }}</li>@endeach</ul>@enderrors
|
|
8
|
-
* @inputError('email')@each(m in $messages)<i>{{ m }}</i>@endeach@endinputError
|
|
9
|
-
* @flashMessage('notice')<p>{{ $message }}</p>@endflashMessage
|
|
10
|
-
*
|
|
11
|
-
* Each renders its body only when the message exists, and binds it under the
|
|
12
|
-
* name upstream uses (`$message` / `$messages`) — bound into the BODY's scope,
|
|
13
|
-
* so it does not leak past the tag.
|
|
14
|
-
*
|
|
15
|
-
* The values come from the `flashMessages` store the session middleware shares
|
|
16
|
-
* into `ctx.view`; the tag reads it out of the render scope.
|
|
17
|
-
*/
|
|
1
|
+
import { ReamError } from '../errors/ReamError.js';
|
|
18
2
|
function isFlashStore(value) {
|
|
19
3
|
return (typeof value === 'object' &&
|
|
20
4
|
value !== null &&
|
|
@@ -98,4 +82,48 @@ export function registerSessionTemplateTags(engine) {
|
|
|
98
82
|
},
|
|
99
83
|
});
|
|
100
84
|
}
|
|
85
|
+
const loadInker = () => {
|
|
86
|
+
// Built rather than written inline: inker is an OPTIONAL peer, and a literal
|
|
87
|
+
// `import('@c9up/inker')` makes a bundler resolve it at build time for an
|
|
88
|
+
// application that never installed it. Computed, it only runs behind the
|
|
89
|
+
// `usingInker` flag.
|
|
90
|
+
const specifier = '@c9up/inker';
|
|
91
|
+
return import(/* @vite-ignore */ specifier);
|
|
92
|
+
};
|
|
93
|
+
function unusable(detail) {
|
|
94
|
+
return new ReamError('E_SESSION_TEMPLATE_ENGINE_UNUSABLE', `The template engine is installed but the session tags cannot be registered: ${detail}`, {
|
|
95
|
+
hint: '`@c9up/inker` must default-export its plugin registrar (`inker.use(plugin)`), whose plugins receive an engine with `registerTag()`.',
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Publish the session tags into the template engine, the way AdonisJS's
|
|
100
|
+
* session does with Edge: through the engine package's MODULE SINGLETON
|
|
101
|
+
* (`inker.use(plugin)`), guarded by the host's `usingInker` flag — never by
|
|
102
|
+
* resolving a container binding. `use()` queues the plugin, and the engine
|
|
103
|
+
* runs it before its next render, whenever the engine was built.
|
|
104
|
+
*
|
|
105
|
+
* Returns whether the tags were handed over. A registrar or an engine of the
|
|
106
|
+
* wrong shape is an error, not a skip: a template using `@flashMessage`
|
|
107
|
+
* would otherwise render it as plain text with no warning.
|
|
108
|
+
*/
|
|
109
|
+
export async function installSessionTemplateTags(usingInker, load = loadInker) {
|
|
110
|
+
if (!usingInker)
|
|
111
|
+
return false;
|
|
112
|
+
const module = await load();
|
|
113
|
+
const registrar = typeof module === 'object' && module !== null ? Reflect.get(module, 'default') : undefined;
|
|
114
|
+
const use = Reflect.get(Object(registrar), 'use');
|
|
115
|
+
if (typeof use !== 'function')
|
|
116
|
+
throw unusable('its default export has no use()');
|
|
117
|
+
use.call(registrar, (engine) => {
|
|
118
|
+
const register = Reflect.get(Object(engine), 'registerTag');
|
|
119
|
+
if (typeof register !== 'function')
|
|
120
|
+
throw unusable('the engine has no registerTag()');
|
|
121
|
+
registerSessionTemplateTags({
|
|
122
|
+
registerTag: (tag) => {
|
|
123
|
+
register.call(engine, tag);
|
|
124
|
+
},
|
|
125
|
+
});
|
|
126
|
+
});
|
|
127
|
+
return true;
|
|
128
|
+
}
|
|
101
129
|
//# sourceMappingURL=templateTags.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"templateTags.js","sourceRoot":"","sources":["../../src/session/templateTags.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"templateTags.js","sourceRoot":"","sources":["../../src/session/templateTags.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StaticMiddleware.d.ts","sourceRoot":"","sources":["../../src/storage/StaticMiddleware.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAA;AAK7B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AAGzD,qEAAqE;AACrE,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAA;AAExD,MAAM,WAAW,YAAY;IAC3B,0CAA0C;IAC1C,IAAI,EAAE,MAAM,CAAA;IAEZ,8EAA8E;IAC9E,OAAO,CAAC,EAAE,OAAO,CAAA;IAEjB;;;;OAIG;IACH,YAAY,CAAC,EAAE,OAAO,CAAA;IAEtB;;;OAGG;IACH,YAAY,CAAC,EAAE,OAAO,CAAA;IAEtB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,cAAc,CAAA;IAEzB,8DAA8D;IAC9D,IAAI,CAAC,EAAE,OAAO,CAAA;IAEd;;;;;;;;;OASG;IACH,UAAU,CAAC,EAAE,MAAM,EAAE,GAAG,KAAK,CAAA;IAE7B,2EAA2E;IAC3E,SAAS,CAAC,EAAE,OAAO,CAAA;IAEnB,oFAAoF;IACpF,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,KAAK,CAAA;IAEjC,2EAA2E;IAC3E,YAAY,CAAC,EAAE,OAAO,CAAA;IAEtB,0EAA0E;IAC1E,MAAM,CAAC,EAAE,MAAM,CAAA;IAEf,wEAAwE;IACxE,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,KAAK,KAAK,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAEtE;;;;;;;OAOG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAQD,qBAAa,gBAAgB;;gBAef,MAAM,EAAE,YAAY;IAqB1B,MAAM,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"StaticMiddleware.d.ts","sourceRoot":"","sources":["../../src/storage/StaticMiddleware.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAA;AAK7B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AAGzD,qEAAqE;AACrE,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAA;AAExD,MAAM,WAAW,YAAY;IAC3B,0CAA0C;IAC1C,IAAI,EAAE,MAAM,CAAA;IAEZ,8EAA8E;IAC9E,OAAO,CAAC,EAAE,OAAO,CAAA;IAEjB;;;;OAIG;IACH,YAAY,CAAC,EAAE,OAAO,CAAA;IAEtB;;;OAGG;IACH,YAAY,CAAC,EAAE,OAAO,CAAA;IAEtB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,cAAc,CAAA;IAEzB,8DAA8D;IAC9D,IAAI,CAAC,EAAE,OAAO,CAAA;IAEd;;;;;;;;;OASG;IACH,UAAU,CAAC,EAAE,MAAM,EAAE,GAAG,KAAK,CAAA;IAE7B,2EAA2E;IAC3E,SAAS,CAAC,EAAE,OAAO,CAAA;IAEnB,oFAAoF;IACpF,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,KAAK,CAAA;IAEjC,2EAA2E;IAC3E,YAAY,CAAC,EAAE,OAAO,CAAA;IAEtB,0EAA0E;IAC1E,MAAM,CAAC,EAAE,MAAM,CAAA;IAEf,wEAAwE;IACxE,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,KAAK,KAAK,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAEtE;;;;;;;OAOG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAQD,qBAAa,gBAAgB;;gBAef,MAAM,EAAE,YAAY;IAqB1B,MAAM,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;CA2RzE;AAWD;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,GAAE,OAAO,CAAC,YAAY,CAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAE5F"}
|
|
@@ -67,8 +67,11 @@ export class StaticMiddleware {
|
|
|
67
67
|
return next();
|
|
68
68
|
const reqPath = ctx.request.path();
|
|
69
69
|
// A dotfile under `deny` is answered, not passed on: falling through would
|
|
70
|
-
// leak its existence through whatever the router answers next.
|
|
71
|
-
|
|
70
|
+
// leak its existence through whatever the router answers next. The check
|
|
71
|
+
// runs on the DECODED path — the name that would be opened — or `/%2eenv`
|
|
72
|
+
// reaches `.env`. A path that does not decode is checked raw; it is never
|
|
73
|
+
// served anyway.
|
|
74
|
+
if (this.#dotFiles === 'deny' && this.#hasDotSegment(decodePath(reqPath) ?? reqPath)) {
|
|
72
75
|
ctx.response.status(403).send('Forbidden');
|
|
73
76
|
return;
|
|
74
77
|
}
|
|
@@ -241,27 +244,23 @@ export class StaticMiddleware {
|
|
|
241
244
|
return null;
|
|
242
245
|
reqPath = reqPath.slice(this.#prefix.length) || '/';
|
|
243
246
|
}
|
|
244
|
-
|
|
247
|
+
// Percent-decoding happens BEFORE any check and BEFORE resolution on
|
|
248
|
+
// purpose: the dot-file policy has to see the name that will be opened
|
|
249
|
+
// (`%2eenv` is `.env`), and `%2e%2e%2f` is `../`, which has to be
|
|
250
|
+
// normalised away by `path.resolve` like any other traversal, not carried
|
|
251
|
+
// through as an opaque segment. A malformed sequence (a lone `%`) is not
|
|
252
|
+
// servable.
|
|
253
|
+
const decoded = decodePath(reqPath);
|
|
254
|
+
if (decoded === null)
|
|
245
255
|
return null;
|
|
246
|
-
// The candidates, in upstream's order: the path itself, then the path with
|
|
247
|
-
// each fallback extension, then the index files for a directory request.
|
|
248
|
-
//
|
|
249
|
-
// Percent-decoding happens BEFORE resolution on purpose: `%2e%2e%2f` is
|
|
250
|
-
// `../` and has to be normalised away by `path.resolve` like any other
|
|
251
|
-
// traversal, not carried through as an opaque segment. `decodeURIComponent`
|
|
252
|
-
// THROWS on a malformed sequence (a lone `%`), which would otherwise become
|
|
253
|
-
// a 500 on a request anyone can send.
|
|
254
|
-
let decoded;
|
|
255
|
-
try {
|
|
256
|
-
decoded = decodeURIComponent(reqPath);
|
|
257
|
-
}
|
|
258
|
-
catch {
|
|
259
|
-
return null;
|
|
260
|
-
}
|
|
261
256
|
// A NUL truncates the path in the syscall layer of some runtimes; Node
|
|
262
257
|
// rejects it, but refusing here keeps the decision in one place.
|
|
263
258
|
if (decoded.includes('\0'))
|
|
264
259
|
return null;
|
|
260
|
+
if (this.#dotFiles !== 'allow' && this.#hasDotSegment(decoded))
|
|
261
|
+
return null;
|
|
262
|
+
// The candidates, in upstream's order: the path itself, then the path with
|
|
263
|
+
// each fallback extension, then the index files for a directory request.
|
|
265
264
|
const relative = decoded.replace(/^\/+/, '');
|
|
266
265
|
const candidates = [];
|
|
267
266
|
if (relative !== '') {
|
|
@@ -274,6 +273,9 @@ export class StaticMiddleware {
|
|
|
274
273
|
candidates.push(relative === '' ? index : `${relative}/${index}`);
|
|
275
274
|
}
|
|
276
275
|
for (const candidate of candidates) {
|
|
276
|
+
// A configured index or extension can itself name a dot file.
|
|
277
|
+
if (this.#dotFiles !== 'allow' && this.#hasDotSegment(candidate))
|
|
278
|
+
continue;
|
|
277
279
|
const opened = await this.#openInRoot(candidate);
|
|
278
280
|
if (opened)
|
|
279
281
|
return opened;
|
|
@@ -331,6 +333,15 @@ export class StaticMiddleware {
|
|
|
331
333
|
}
|
|
332
334
|
}
|
|
333
335
|
}
|
|
336
|
+
/** `decodeURIComponent` that answers `null` instead of throwing on a malformed sequence. */
|
|
337
|
+
function decodePath(reqPath) {
|
|
338
|
+
try {
|
|
339
|
+
return decodeURIComponent(reqPath);
|
|
340
|
+
}
|
|
341
|
+
catch {
|
|
342
|
+
return null;
|
|
343
|
+
}
|
|
344
|
+
}
|
|
334
345
|
/**
|
|
335
346
|
* Static config with the defaults filled in — `@adonisjs/static`'s
|
|
336
347
|
* `defineConfig`, value for value.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StaticMiddleware.js","sourceRoot":"","sources":["../../src/storage/StaticMiddleware.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"StaticMiddleware.js","sourceRoot":"","sources":["../../src/storage/StaticMiddleware.ts"],"names":[],"mappings":"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"}
|
package/events.darwin-arm64.node
CHANGED
|
Binary file
|
package/events.darwin-x64.node
CHANGED
|
Binary file
|
|
Binary file
|
package/index.darwin-arm64.node
CHANGED
|
Binary file
|
package/index.darwin-x64.node
CHANGED
|
Binary file
|
|
Binary file
|
package/index.linux-x64-gnu.node
CHANGED
|
Binary file
|
|
Binary file
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@c9up/ream",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.29",
|
|
4
4
|
"description": "Ream — Rust-powered Node.js application framework",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -119,6 +119,10 @@
|
|
|
119
119
|
"types": "./dist/testing/TestClient.d.ts",
|
|
120
120
|
"import": "./dist/testing/TestClient.js"
|
|
121
121
|
},
|
|
122
|
+
"./http-client": {
|
|
123
|
+
"types": "./dist/http-client/index.d.ts",
|
|
124
|
+
"import": "./dist/http-client/index.js"
|
|
125
|
+
},
|
|
122
126
|
"./testing/utils": {
|
|
123
127
|
"types": "./dist/testing/testUtils.d.ts",
|
|
124
128
|
"import": "./dist/testing/testUtils.js"
|
|
@@ -233,18 +237,22 @@
|
|
|
233
237
|
"tsconfig.client.json"
|
|
234
238
|
],
|
|
235
239
|
"dependencies": {
|
|
236
|
-
"@c9up/lumen": "^0.1.
|
|
240
|
+
"@c9up/lumen": "^0.1.2",
|
|
237
241
|
"file-type": "^22.0.2",
|
|
238
242
|
"reflect-metadata": "^0.2.2"
|
|
239
243
|
},
|
|
240
244
|
"peerDependencies": {
|
|
241
245
|
"@c9up/comet": "^0.1.0",
|
|
246
|
+
"@c9up/inker": "^0.1.20",
|
|
242
247
|
"@c9up/quasar": "^0.1.0 || ^0.2.0"
|
|
243
248
|
},
|
|
244
249
|
"peerDependenciesMeta": {
|
|
245
250
|
"@c9up/comet": {
|
|
246
251
|
"optional": true
|
|
247
252
|
},
|
|
253
|
+
"@c9up/inker": {
|
|
254
|
+
"optional": true
|
|
255
|
+
},
|
|
248
256
|
"@c9up/quasar": {
|
|
249
257
|
"optional": true
|
|
250
258
|
}
|
|
@@ -252,6 +260,7 @@
|
|
|
252
260
|
"devDependencies": {
|
|
253
261
|
"@biomejs/biome": "2.5.12",
|
|
254
262
|
"@c9up/comet": "^0.1.0",
|
|
263
|
+
"@c9up/inker": "^0.1.20",
|
|
255
264
|
"@types/node": "^22.20.1",
|
|
256
265
|
"@vitest/coverage-v8": "4.1.11",
|
|
257
266
|
"mime-db": "^1.54.0",
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/src/Codemods.ts
CHANGED
|
@@ -1,9 +1,36 @@
|
|
|
1
1
|
import * as fs from 'node:fs'
|
|
2
2
|
import * as path from 'node:path'
|
|
3
|
+
import {
|
|
4
|
+
appendToLiteral,
|
|
5
|
+
findCall,
|
|
6
|
+
findExportDefaultObject,
|
|
7
|
+
isSingleExpression,
|
|
8
|
+
matchClose,
|
|
9
|
+
properties,
|
|
10
|
+
segments,
|
|
11
|
+
} from './codemods/source.js'
|
|
3
12
|
import { render as renderTemplate, type StubState } from './stubs/template.js'
|
|
4
13
|
|
|
5
14
|
export type { StubState }
|
|
6
15
|
|
|
16
|
+
/** The environments a preload (or provider) entry can be scoped to. */
|
|
17
|
+
export type PreloadEnvironment = 'web' | 'console' | 'test' | 'repl'
|
|
18
|
+
|
|
19
|
+
const PRELOAD_ENVIRONMENTS: readonly PreloadEnvironment[] = ['web', 'console', 'test', 'repl']
|
|
20
|
+
|
|
21
|
+
/** Validation rules a configure hook adds to `start/env.ts`. */
|
|
22
|
+
export interface EnvValidationNode {
|
|
23
|
+
/** Written once, as a banner comment above the rules this call adds. */
|
|
24
|
+
leadingComment?: string
|
|
25
|
+
/** Variable name → rule source, e.g. `{ REDIS_PORT: 'Env.schema.number()' }`. */
|
|
26
|
+
variables: Record<string, string>
|
|
27
|
+
/**
|
|
28
|
+
* Replace a rule the file already has. Off by default, so a rule the user
|
|
29
|
+
* edited survives a re-run; configure hooks pass their `--force` flag.
|
|
30
|
+
*/
|
|
31
|
+
overwrite?: boolean
|
|
32
|
+
}
|
|
33
|
+
|
|
7
34
|
export interface Codemods {
|
|
8
35
|
addProvider(importPath: string): Promise<void>
|
|
9
36
|
addMetaFile(pattern: string, reloadServer?: boolean): Promise<void>
|
|
@@ -17,6 +44,8 @@ export interface Codemods {
|
|
|
17
44
|
): Promise<GeneratedStub>
|
|
18
45
|
registerCommand(importPath: string): Promise<void>
|
|
19
46
|
registerMiddleware(importPath: string, options?: { tier?: 'server' | 'router' }): Promise<void>
|
|
47
|
+
defineEnvValidations(definition: EnvValidationNode): Promise<string[]>
|
|
48
|
+
addPreloadFile(modulePath: string, environments?: PreloadEnvironment[]): Promise<void>
|
|
20
49
|
}
|
|
21
50
|
|
|
22
51
|
/** What a stub may interpolate. Scalars only — a stub is text, not a program. */
|
|
@@ -128,6 +157,76 @@ function assertCanonicallyInside(root: string, filePath: string, displayName: st
|
|
|
128
157
|
}
|
|
129
158
|
}
|
|
130
159
|
|
|
160
|
+
const ENV_NAME = /^[A-Za-z_][A-Za-z0-9_]*$/
|
|
161
|
+
|
|
162
|
+
/**
|
|
163
|
+
* A module path goes between the quotes of an `import('...')`; anything that
|
|
164
|
+
* could close them, escape or end the line is refused rather than escaped.
|
|
165
|
+
*/
|
|
166
|
+
const SAFE_MODULE_PATH = /^[^'"`\\\r\n\u2028\u2029]+$/
|
|
167
|
+
|
|
168
|
+
const BANNER_RULE = '|----------------------------------------------------------'
|
|
169
|
+
|
|
170
|
+
/** The rules of `definition`, refused before anything is written when unsafe. */
|
|
171
|
+
function assertEnvValidations(definition: EnvValidationNode): void {
|
|
172
|
+
const comment = definition.leadingComment
|
|
173
|
+
if (comment !== undefined && (/[\r\n\u2028\u2029]/.test(comment) || comment.includes('*/'))) {
|
|
174
|
+
throw new Error(
|
|
175
|
+
'[configure] defineEnvValidations: the leading comment must be one line without `*/`',
|
|
176
|
+
)
|
|
177
|
+
}
|
|
178
|
+
for (const [name, rule] of Object.entries(definition.variables)) {
|
|
179
|
+
if (!ENV_NAME.test(name)) {
|
|
180
|
+
throw new Error(
|
|
181
|
+
`[configure] defineEnvValidations: '${name}' is not an environment variable name`,
|
|
182
|
+
)
|
|
183
|
+
}
|
|
184
|
+
if (typeof rule !== 'string' || !isSingleExpression(rule)) {
|
|
185
|
+
throw new Error(
|
|
186
|
+
`[configure] defineEnvValidations: the rule for ${name} is not one complete expression: ${String(rule)}`,
|
|
187
|
+
)
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
/** The `{` and `}` of the schema object passed to `Env.create`. */
|
|
193
|
+
function locateEnvSchema(content: string): { open: number; close: number } {
|
|
194
|
+
const paren = findCall(content, 'Env.create')
|
|
195
|
+
const parenClose = paren === -1 ? -1 : matchClose(content, paren)
|
|
196
|
+
if (paren === -1 || parenClose === -1) {
|
|
197
|
+
throw new Error(
|
|
198
|
+
'[configure] Could not find an Env.create(...) call in start/env.ts — add the validations by hand.',
|
|
199
|
+
)
|
|
200
|
+
}
|
|
201
|
+
const open = segments(content, paren + 1, parenClose)[1]?.codeStart ?? -1
|
|
202
|
+
const close = content[open] === '{' ? matchClose(content, open) : -1
|
|
203
|
+
if (close === -1) {
|
|
204
|
+
throw new Error(
|
|
205
|
+
'[configure] The second argument of Env.create in start/env.ts is not an object literal — add the validations by hand.',
|
|
206
|
+
)
|
|
207
|
+
}
|
|
208
|
+
return { open, close }
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
/** The `{` and `}` of the object `reamrc.ts` exports (through `defineConfig` or bare). */
|
|
212
|
+
function locateRcObject(content: string): { open: number; close: number } | null {
|
|
213
|
+
const paren = findCall(content, 'defineConfig')
|
|
214
|
+
let open = -1
|
|
215
|
+
if (paren !== -1) {
|
|
216
|
+
const parenClose = matchClose(content, paren)
|
|
217
|
+
if (parenClose !== -1) open = segments(content, paren + 1, parenClose)[0]?.codeStart ?? -1
|
|
218
|
+
} else {
|
|
219
|
+
open = findExportDefaultObject(content)
|
|
220
|
+
}
|
|
221
|
+
const close = open !== -1 && content[open] === '{' ? matchClose(content, open) : -1
|
|
222
|
+
return close === -1 ? null : { open, close }
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
/** The module an rc array element lazily imports. */
|
|
226
|
+
function importedModule(element: string): string | undefined {
|
|
227
|
+
return /import\s*\(\s*(['"])([^'"]*)\1\s*\)/.exec(element)?.[2]
|
|
228
|
+
}
|
|
229
|
+
|
|
131
230
|
export function createCodemods(options?: { force?: boolean; cwd?: string }): Codemods {
|
|
132
231
|
const force = options?.force ?? false
|
|
133
232
|
const root = path.resolve(options?.cwd ?? process.cwd())
|
|
@@ -516,5 +615,171 @@ export function createCodemods(options?: { force?: boolean; cwd?: string }): Cod
|
|
|
516
615
|
content = `${content.slice(0, targetBlock.start)}${eol}${entry}${content.slice(targetBlock.start)}`
|
|
517
616
|
fs.writeFileSync(kernelPath, content)
|
|
518
617
|
},
|
|
618
|
+
|
|
619
|
+
/**
|
|
620
|
+
* Add validation rules to the schema `start/env.ts` passes to
|
|
621
|
+
* `Env.create`, so the variables a package writes to `.env` are checked
|
|
622
|
+
* at boot like the app's own.
|
|
623
|
+
*
|
|
624
|
+
* A rule already in the file is left alone, unless `overwrite` is set:
|
|
625
|
+
* the user may have tightened it. Returns the variables kept that way
|
|
626
|
+
* with a rule different from the one asked for, so the caller can say
|
|
627
|
+
* so. The banner comment is written only when the first new rule comes
|
|
628
|
+
* before any variable the file already had.
|
|
629
|
+
*/
|
|
630
|
+
async defineEnvValidations(definition: EnvValidationNode): Promise<string[]> {
|
|
631
|
+
const envPath = path.join(root, 'start', 'env.ts')
|
|
632
|
+
if (!fs.existsSync(envPath)) {
|
|
633
|
+
throw new Error(
|
|
634
|
+
`[configure] start/env.ts not found — cannot add the validations for ${Object.keys(definition.variables).join(', ')}.`,
|
|
635
|
+
)
|
|
636
|
+
}
|
|
637
|
+
assertCanonicallyInside(root, envPath, 'start/env.ts')
|
|
638
|
+
assertEnvValidations(definition)
|
|
639
|
+
|
|
640
|
+
const original = fs.readFileSync(envPath, 'utf8')
|
|
641
|
+
const eol = detectLineEnding(original)
|
|
642
|
+
let content = original
|
|
643
|
+
const schema = locateEnvSchema(content)
|
|
644
|
+
const existing = new Map(
|
|
645
|
+
properties(content, schema.open, schema.close).map((property) => [property.key, property]),
|
|
646
|
+
)
|
|
647
|
+
|
|
648
|
+
const kept: string[] = []
|
|
649
|
+
const replacements: Array<{ start: number; end: number; text: string }> = []
|
|
650
|
+
const additions: Array<[string, string]> = []
|
|
651
|
+
let shouldAddComment = true
|
|
652
|
+
let decorate = false
|
|
653
|
+
for (const [name, rule] of Object.entries(definition.variables)) {
|
|
654
|
+
const property = existing.get(name)
|
|
655
|
+
if (property === undefined) {
|
|
656
|
+
if (additions.length === 0) decorate = shouldAddComment
|
|
657
|
+
shouldAddComment = false
|
|
658
|
+
additions.push([name, rule])
|
|
659
|
+
continue
|
|
660
|
+
}
|
|
661
|
+
shouldAddComment = false
|
|
662
|
+
const current = content.slice(property.valueStart, property.valueEnd)
|
|
663
|
+
if (definition.overwrite) {
|
|
664
|
+
replacements.push({ start: property.valueStart, end: property.valueEnd, text: rule })
|
|
665
|
+
} else if (current.replace(/\s+/g, '') !== rule.replace(/\s+/g, '')) {
|
|
666
|
+
kept.push(name)
|
|
667
|
+
}
|
|
668
|
+
}
|
|
669
|
+
|
|
670
|
+
for (const { start, end, text } of replacements.sort((a, b) => b.start - a.start)) {
|
|
671
|
+
content = `${content.slice(0, start)}${text}${content.slice(end)}`
|
|
672
|
+
}
|
|
673
|
+
|
|
674
|
+
if (additions.length > 0) {
|
|
675
|
+
const { open, close } = locateEnvSchema(content)
|
|
676
|
+
const comment = definition.leadingComment
|
|
677
|
+
content = appendToLiteral(
|
|
678
|
+
content,
|
|
679
|
+
open,
|
|
680
|
+
close,
|
|
681
|
+
eol,
|
|
682
|
+
(indent) => [
|
|
683
|
+
...(decorate && comment !== undefined
|
|
684
|
+
? [
|
|
685
|
+
`${indent}/*`,
|
|
686
|
+
`${indent}${BANNER_RULE}`,
|
|
687
|
+
`${indent}| ${comment}`,
|
|
688
|
+
`${indent}${BANNER_RULE}`,
|
|
689
|
+
`${indent}*/`,
|
|
690
|
+
]
|
|
691
|
+
: []),
|
|
692
|
+
...additions.map(([name, rule]) => `${indent}${name}: ${rule},`),
|
|
693
|
+
],
|
|
694
|
+
decorate,
|
|
695
|
+
)
|
|
696
|
+
}
|
|
697
|
+
|
|
698
|
+
if (content !== original) fs.writeFileSync(envPath, content)
|
|
699
|
+
return kept
|
|
700
|
+
},
|
|
701
|
+
|
|
702
|
+
/**
|
|
703
|
+
* Register a preload file in `reamrc.ts`, appended to `preloads` (the
|
|
704
|
+
* array is created when absent). Listing only some environments writes
|
|
705
|
+
* a `{ file, environment }` entry; none, or all of them, a plain lazy
|
|
706
|
+
* import. A module already in `preloads` is left as it is.
|
|
707
|
+
*/
|
|
708
|
+
async addPreloadFile(modulePath: string, environments?: PreloadEnvironment[]): Promise<void> {
|
|
709
|
+
if (!SAFE_MODULE_PATH.test(modulePath)) {
|
|
710
|
+
throw new Error(`[configure] Unsafe preload module path: ${JSON.stringify(modulePath)}`)
|
|
711
|
+
}
|
|
712
|
+
for (const environment of environments ?? []) {
|
|
713
|
+
if (!PRELOAD_ENVIRONMENTS.includes(environment)) {
|
|
714
|
+
throw new Error(
|
|
715
|
+
`[configure] Unknown environment '${String(environment)}' for preload ${modulePath}. Expected one of ${PRELOAD_ENVIRONMENTS.join(', ')}.`,
|
|
716
|
+
)
|
|
717
|
+
}
|
|
718
|
+
}
|
|
719
|
+
|
|
720
|
+
const rcPath = path.join(root, 'reamrc.ts')
|
|
721
|
+
if (!fs.existsSync(rcPath)) {
|
|
722
|
+
throw new Error(
|
|
723
|
+
`[configure] reamrc.ts not found — cannot register preload ${modulePath}. Run 'ream new' first.`,
|
|
724
|
+
)
|
|
725
|
+
}
|
|
726
|
+
assertCanonicallyInside(root, rcPath, 'reamrc.ts')
|
|
727
|
+
|
|
728
|
+
const content = fs.readFileSync(rcPath, 'utf8')
|
|
729
|
+
const eol = detectLineEnding(content)
|
|
730
|
+
const config = locateRcObject(content)
|
|
731
|
+
if (config === null) {
|
|
732
|
+
throw new Error(
|
|
733
|
+
`[configure] Could not find 'defineConfig({ ... })' in reamrc.ts — preload ${modulePath} not added.`,
|
|
734
|
+
)
|
|
735
|
+
}
|
|
736
|
+
|
|
737
|
+
// Scoped only when it actually leaves an environment out.
|
|
738
|
+
const scope = PRELOAD_ENVIRONMENTS.some(
|
|
739
|
+
(environment) => environments !== undefined && !environments.includes(environment),
|
|
740
|
+
)
|
|
741
|
+
? environments
|
|
742
|
+
: undefined
|
|
743
|
+
const entry = (indent: string): string[] =>
|
|
744
|
+
scope
|
|
745
|
+
? [
|
|
746
|
+
`${indent}{`,
|
|
747
|
+
`${indent} file: () => import('${modulePath}'),`,
|
|
748
|
+
`${indent} environment: [${scope.map((e) => `'${e}'`).join(', ')}],`,
|
|
749
|
+
`${indent}},`,
|
|
750
|
+
]
|
|
751
|
+
: [`${indent}() => import('${modulePath}'),`]
|
|
752
|
+
|
|
753
|
+
const preloads = properties(content, config.open, config.close).find(
|
|
754
|
+
(property) => property.key === 'preloads',
|
|
755
|
+
)
|
|
756
|
+
if (preloads === undefined) {
|
|
757
|
+
fs.writeFileSync(
|
|
758
|
+
rcPath,
|
|
759
|
+
appendToLiteral(content, config.open, config.close, eol, (indent) => [
|
|
760
|
+
`${indent}preloads: [`,
|
|
761
|
+
...entry(`${indent} `),
|
|
762
|
+
`${indent}],`,
|
|
763
|
+
]),
|
|
764
|
+
)
|
|
765
|
+
return
|
|
766
|
+
}
|
|
767
|
+
|
|
768
|
+
const arrayClose =
|
|
769
|
+
content[preloads.valueStart] === '[' ? matchClose(content, preloads.valueStart) : -1
|
|
770
|
+
if (arrayClose === -1) {
|
|
771
|
+
throw new Error(
|
|
772
|
+
`[configure] reamrc.ts declares preloads as something other than an array literal — add ${modulePath} by hand.`,
|
|
773
|
+
)
|
|
774
|
+
}
|
|
775
|
+
const registered = segments(content, preloads.valueStart + 1, arrayClose).some(
|
|
776
|
+
(element) => importedModule(content.slice(element.codeStart, element.end)) === modulePath,
|
|
777
|
+
)
|
|
778
|
+
if (registered) return
|
|
779
|
+
fs.writeFileSync(
|
|
780
|
+
rcPath,
|
|
781
|
+
appendToLiteral(content, preloads.valueStart, arrayClose, eol, entry),
|
|
782
|
+
)
|
|
783
|
+
},
|
|
519
784
|
}
|
|
520
785
|
}
|