@qpqjs/user-script 0.0.0-stage → 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.
- package/README.md +9 -2
- package/lib/commonjs/actionProcessor/getUserScriptBuildActionProcessor.d.ts +1 -0
- package/lib/commonjs/actionProcessor/getUserScriptBuildActionProcessor.js +69 -0
- package/lib/commonjs/actionProcessor/getUserScriptBuildActionProcessor.js.map +1 -0
- package/lib/commonjs/actionProcessor/getUserScriptBuildActionProcessors.d.ts +3 -0
- package/lib/commonjs/actionProcessor/getUserScriptBuildActionProcessors.js +20 -0
- package/lib/commonjs/actionProcessor/getUserScriptBuildActionProcessors.js.map +1 -0
- package/lib/commonjs/actionProcessor/getUserScriptBuildFromZipActionProcessor.d.ts +1 -0
- package/lib/commonjs/actionProcessor/getUserScriptBuildFromZipActionProcessor.js +79 -0
- package/lib/commonjs/actionProcessor/getUserScriptBuildFromZipActionProcessor.js.map +1 -0
- package/lib/commonjs/actionProcessor/index.d.ts +4 -0
- package/lib/commonjs/actionProcessor/index.js +21 -0
- package/lib/commonjs/actionProcessor/index.js.map +1 -0
- package/lib/commonjs/actionProcessor/logic/BuiltUserScript.d.ts +4 -0
- package/lib/commonjs/actionProcessor/logic/BuiltUserScript.js +3 -0
- package/lib/commonjs/actionProcessor/logic/BuiltUserScript.js.map +1 -0
- package/lib/commonjs/actionProcessor/logic/USER_SCRIPT_SOURCE_LIMITS.d.ts +5 -0
- package/lib/commonjs/actionProcessor/logic/USER_SCRIPT_SOURCE_LIMITS.js +9 -0
- package/lib/commonjs/actionProcessor/logic/USER_SCRIPT_SOURCE_LIMITS.js.map +1 -0
- package/lib/commonjs/actionProcessor/logic/UserScriptArchiveError.d.ts +10 -0
- package/lib/commonjs/actionProcessor/logic/UserScriptArchiveError.js +22 -0
- package/lib/commonjs/actionProcessor/logic/UserScriptArchiveError.js.map +1 -0
- package/lib/commonjs/actionProcessor/logic/UserScriptSourceFile.d.ts +5 -0
- package/lib/commonjs/actionProcessor/logic/UserScriptSourceFile.js +3 -0
- package/lib/commonjs/actionProcessor/logic/UserScriptSourceFile.js.map +1 -0
- package/lib/commonjs/actionProcessor/logic/askUserScriptCheckPublishedOutput.d.ts +8 -0
- package/lib/commonjs/actionProcessor/logic/askUserScriptCheckPublishedOutput.js +30 -0
- package/lib/commonjs/actionProcessor/logic/askUserScriptCheckPublishedOutput.js.map +1 -0
- package/lib/commonjs/actionProcessor/logic/askUserScriptCollectSource.d.ts +9 -0
- package/lib/commonjs/actionProcessor/logic/askUserScriptCollectSource.js +53 -0
- package/lib/commonjs/actionProcessor/logic/askUserScriptCollectSource.js.map +1 -0
- package/lib/commonjs/actionProcessor/logic/askUserScriptPublishOutput.d.ts +3 -0
- package/lib/commonjs/actionProcessor/logic/askUserScriptPublishOutput.js +9 -0
- package/lib/commonjs/actionProcessor/logic/askUserScriptPublishOutput.js.map +1 -0
- package/lib/commonjs/actionProcessor/logic/buildUserScriptInTempDir.d.ts +9 -0
- package/lib/commonjs/actionProcessor/logic/buildUserScriptInTempDir.js +41 -0
- package/lib/commonjs/actionProcessor/logic/buildUserScriptInTempDir.js.map +1 -0
- package/lib/commonjs/actionProcessor/logic/extractUserScriptZip.d.ts +8 -0
- package/lib/commonjs/actionProcessor/logic/extractUserScriptZip.js +148 -0
- package/lib/commonjs/actionProcessor/logic/extractUserScriptZip.js.map +1 -0
- package/lib/commonjs/actionProcessor/logic/getUserScriptBuildErrorType.d.ts +7 -0
- package/lib/commonjs/actionProcessor/logic/getUserScriptBuildErrorType.js +20 -0
- package/lib/commonjs/actionProcessor/logic/getUserScriptBuildErrorType.js.map +1 -0
- package/lib/commonjs/actionProcessor/logic/index.d.ts +12 -0
- package/lib/commonjs/actionProcessor/logic/index.js +29 -0
- package/lib/commonjs/actionProcessor/logic/index.js.map +1 -0
- package/lib/commonjs/actionProcessor/logic/isSafeProjectPath.d.ts +5 -0
- package/lib/commonjs/actionProcessor/logic/isSafeProjectPath.js +13 -0
- package/lib/commonjs/actionProcessor/logic/isSafeProjectPath.js.map +1 -0
- package/lib/commonjs/actionProcessor/logic/materialiseUserScriptSource.d.ts +3 -0
- package/lib/commonjs/actionProcessor/logic/materialiseUserScriptSource.js +23 -0
- package/lib/commonjs/actionProcessor/logic/materialiseUserScriptSource.js.map +1 -0
- package/lib/commonjs/build/USER_SCRIPT_ENTRY_CANDIDATES.d.ts +2 -0
- package/lib/commonjs/build/USER_SCRIPT_ENTRY_CANDIDATES.js +6 -0
- package/lib/commonjs/build/USER_SCRIPT_ENTRY_CANDIDATES.js.map +1 -0
- package/lib/commonjs/build/USER_SCRIPT_OUTPUT_FILENAME.d.ts +2 -0
- package/lib/commonjs/build/USER_SCRIPT_OUTPUT_FILENAME.js +6 -0
- package/lib/commonjs/build/USER_SCRIPT_OUTPUT_FILENAME.js.map +1 -0
- package/lib/commonjs/build/UserScriptBuildError.d.ts +12 -0
- package/lib/commonjs/build/UserScriptBuildError.js +26 -0
- package/lib/commonjs/build/UserScriptBuildError.js.map +1 -0
- package/lib/commonjs/build/UserScriptBuildResult.d.ts +4 -0
- package/lib/commonjs/build/UserScriptBuildResult.js +3 -0
- package/lib/commonjs/build/UserScriptBuildResult.js.map +1 -0
- package/lib/commonjs/build/__fixtures__/basic/src/helpers/formatSum.d.ts +1 -0
- package/lib/commonjs/build/__fixtures__/basic/src/helpers/formatSum.js +6 -0
- package/lib/commonjs/build/__fixtures__/basic/src/helpers/formatSum.js.map +1 -0
- package/lib/commonjs/build/__fixtures__/basic/src/main.d.ts +4 -0
- package/lib/commonjs/build/__fixtures__/basic/src/main.js +17 -0
- package/lib/commonjs/build/__fixtures__/basic/src/main.js.map +1 -0
- package/lib/commonjs/build/__fixtures__/builtin/src/main.d.ts +1 -0
- package/lib/commonjs/build/__fixtures__/builtin/src/main.js +7 -0
- package/lib/commonjs/build/__fixtures__/builtin/src/main.js.map +1 -0
- package/lib/commonjs/build/__fixtures__/noEntry/src/notMain.d.ts +1 -0
- package/lib/commonjs/build/__fixtures__/noEntry/src/notMain.js +6 -0
- package/lib/commonjs/build/__fixtures__/noEntry/src/notMain.js.map +1 -0
- package/lib/commonjs/build/__fixtures__/nonFunction/src/main.d.ts +2 -0
- package/lib/commonjs/build/__fixtures__/nonFunction/src/main.js +7 -0
- package/lib/commonjs/build/__fixtures__/nonFunction/src/main.js.map +1 -0
- package/lib/commonjs/build/assertUserScriptExports.d.ts +6 -0
- package/lib/commonjs/build/assertUserScriptExports.js +20 -0
- package/lib/commonjs/build/assertUserScriptExports.js.map +1 -0
- package/lib/commonjs/build/buildUserScript.d.ts +15 -0
- package/lib/commonjs/build/buildUserScript.js +55 -0
- package/lib/commonjs/build/buildUserScript.js.map +1 -0
- package/lib/commonjs/build/checkUserScriptOutput.d.ts +7 -0
- package/lib/commonjs/build/checkUserScriptOutput.js +17 -0
- package/lib/commonjs/build/checkUserScriptOutput.js.map +1 -0
- package/lib/commonjs/build/createUserScriptExternals.d.ts +11 -0
- package/lib/commonjs/build/createUserScriptExternals.js +34 -0
- package/lib/commonjs/build/createUserScriptExternals.js.map +1 -0
- package/lib/commonjs/build/getUserScriptRspackConfig.d.ts +15 -0
- package/lib/commonjs/build/getUserScriptRspackConfig.js +49 -0
- package/lib/commonjs/build/getUserScriptRspackConfig.js.map +1 -0
- package/lib/commonjs/build/index.d.ts +13 -0
- package/lib/commonjs/build/index.js +30 -0
- package/lib/commonjs/build/index.js.map +1 -0
- package/lib/commonjs/build/loadRspackModule.d.ts +8 -0
- package/lib/commonjs/build/loadRspackModule.js +51 -0
- package/lib/commonjs/build/loadRspackModule.js.map +1 -0
- package/lib/commonjs/build/resolveUserScriptEntry.d.ts +2 -0
- package/lib/commonjs/build/resolveUserScriptEntry.js +20 -0
- package/lib/commonjs/build/resolveUserScriptEntry.js.map +1 -0
- package/lib/commonjs/build/runUserScriptRspack.d.ts +7 -0
- package/lib/commonjs/build/runUserScriptRspack.js +32 -0
- package/lib/commonjs/build/runUserScriptRspack.js.map +1 -0
- package/lib/commonjs/build/userScriptTsRule.d.ts +6 -0
- package/lib/commonjs/build/userScriptTsRule.js +21 -0
- package/lib/commonjs/build/userScriptTsRule.js.map +1 -0
- package/lib/commonjs/config/USER_SCRIPT_BUILDER_LAYER_MODULES.d.ts +5 -0
- package/lib/commonjs/config/USER_SCRIPT_BUILDER_LAYER_MODULES.js +9 -0
- package/lib/commonjs/config/USER_SCRIPT_BUILDER_LAYER_MODULES.js.map +1 -0
- package/lib/commonjs/config/USER_SCRIPT_BUILDER_LAYER_NAME.d.ts +2 -0
- package/lib/commonjs/config/USER_SCRIPT_BUILDER_LAYER_NAME.js +6 -0
- package/lib/commonjs/config/USER_SCRIPT_BUILDER_LAYER_NAME.js.map +1 -0
- package/lib/commonjs/config/defineUserScriptBuilder.d.ts +7 -0
- package/lib/commonjs/config/defineUserScriptBuilder.js +16 -0
- package/lib/commonjs/config/defineUserScriptBuilder.js.map +1 -0
- package/lib/commonjs/config/getUserScriptBuilderApiLayer.d.ts +7 -0
- package/lib/commonjs/config/getUserScriptBuilderApiLayer.js +18 -0
- package/lib/commonjs/config/getUserScriptBuilderApiLayer.js.map +1 -0
- package/lib/commonjs/config/getUserScriptBuilderLayerDir.d.ts +6 -0
- package/lib/commonjs/config/getUserScriptBuilderLayerDir.js +33 -0
- package/lib/commonjs/config/getUserScriptBuilderLayerDir.js.map +1 -0
- package/lib/commonjs/config/index.d.ts +5 -0
- package/lib/commonjs/config/index.js +22 -0
- package/lib/commonjs/config/index.js.map +1 -0
- package/lib/commonjs/index.d.ts +3 -0
- package/lib/commonjs/index.js +20 -0
- package/lib/commonjs/index.js.map +1 -0
- package/lib/esm/actionProcessor/getUserScriptBuildActionProcessor.d.ts +1 -0
- package/lib/esm/actionProcessor/getUserScriptBuildActionProcessor.js +56 -0
- package/lib/esm/actionProcessor/getUserScriptBuildActionProcessor.js.map +1 -0
- package/lib/esm/actionProcessor/getUserScriptBuildActionProcessors.d.ts +3 -0
- package/lib/esm/actionProcessor/getUserScriptBuildActionProcessors.js +8 -0
- package/lib/esm/actionProcessor/getUserScriptBuildActionProcessors.js.map +1 -0
- package/lib/esm/actionProcessor/getUserScriptBuildFromZipActionProcessor.d.ts +1 -0
- package/lib/esm/actionProcessor/getUserScriptBuildFromZipActionProcessor.js +66 -0
- package/lib/esm/actionProcessor/getUserScriptBuildFromZipActionProcessor.js.map +1 -0
- package/lib/esm/actionProcessor/index.d.ts +4 -0
- package/lib/esm/actionProcessor/index.js +5 -0
- package/lib/esm/actionProcessor/index.js.map +1 -0
- package/lib/esm/actionProcessor/logic/BuiltUserScript.d.ts +4 -0
- package/lib/esm/actionProcessor/logic/BuiltUserScript.js +2 -0
- package/lib/esm/actionProcessor/logic/BuiltUserScript.js.map +1 -0
- package/lib/esm/actionProcessor/logic/USER_SCRIPT_SOURCE_LIMITS.d.ts +5 -0
- package/lib/esm/actionProcessor/logic/USER_SCRIPT_SOURCE_LIMITS.js +6 -0
- package/lib/esm/actionProcessor/logic/USER_SCRIPT_SOURCE_LIMITS.js.map +1 -0
- package/lib/esm/actionProcessor/logic/UserScriptArchiveError.d.ts +10 -0
- package/lib/esm/actionProcessor/logic/UserScriptArchiveError.js +19 -0
- package/lib/esm/actionProcessor/logic/UserScriptArchiveError.js.map +1 -0
- package/lib/esm/actionProcessor/logic/UserScriptSourceFile.d.ts +5 -0
- package/lib/esm/actionProcessor/logic/UserScriptSourceFile.js +2 -0
- package/lib/esm/actionProcessor/logic/UserScriptSourceFile.js.map +1 -0
- package/lib/esm/actionProcessor/logic/askUserScriptCheckPublishedOutput.d.ts +8 -0
- package/lib/esm/actionProcessor/logic/askUserScriptCheckPublishedOutput.js +27 -0
- package/lib/esm/actionProcessor/logic/askUserScriptCheckPublishedOutput.js.map +1 -0
- package/lib/esm/actionProcessor/logic/askUserScriptCollectSource.d.ts +9 -0
- package/lib/esm/actionProcessor/logic/askUserScriptCollectSource.js +50 -0
- package/lib/esm/actionProcessor/logic/askUserScriptCollectSource.js.map +1 -0
- package/lib/esm/actionProcessor/logic/askUserScriptPublishOutput.d.ts +3 -0
- package/lib/esm/actionProcessor/logic/askUserScriptPublishOutput.js +6 -0
- package/lib/esm/actionProcessor/logic/askUserScriptPublishOutput.js.map +1 -0
- package/lib/esm/actionProcessor/logic/buildUserScriptInTempDir.d.ts +9 -0
- package/lib/esm/actionProcessor/logic/buildUserScriptInTempDir.js +25 -0
- package/lib/esm/actionProcessor/logic/buildUserScriptInTempDir.js.map +1 -0
- package/lib/esm/actionProcessor/logic/extractUserScriptZip.d.ts +8 -0
- package/lib/esm/actionProcessor/logic/extractUserScriptZip.js +132 -0
- package/lib/esm/actionProcessor/logic/extractUserScriptZip.js.map +1 -0
- package/lib/esm/actionProcessor/logic/getUserScriptBuildErrorType.d.ts +7 -0
- package/lib/esm/actionProcessor/logic/getUserScriptBuildErrorType.js +16 -0
- package/lib/esm/actionProcessor/logic/getUserScriptBuildErrorType.js.map +1 -0
- package/lib/esm/actionProcessor/logic/index.d.ts +12 -0
- package/lib/esm/actionProcessor/logic/index.js +13 -0
- package/lib/esm/actionProcessor/logic/index.js.map +1 -0
- package/lib/esm/actionProcessor/logic/isSafeProjectPath.d.ts +5 -0
- package/lib/esm/actionProcessor/logic/isSafeProjectPath.js +9 -0
- package/lib/esm/actionProcessor/logic/isSafeProjectPath.js.map +1 -0
- package/lib/esm/actionProcessor/logic/materialiseUserScriptSource.d.ts +3 -0
- package/lib/esm/actionProcessor/logic/materialiseUserScriptSource.js +16 -0
- package/lib/esm/actionProcessor/logic/materialiseUserScriptSource.js.map +1 -0
- package/lib/esm/build/USER_SCRIPT_ENTRY_CANDIDATES.d.ts +2 -0
- package/lib/esm/build/USER_SCRIPT_ENTRY_CANDIDATES.js +3 -0
- package/lib/esm/build/USER_SCRIPT_ENTRY_CANDIDATES.js.map +1 -0
- package/lib/esm/build/USER_SCRIPT_OUTPUT_FILENAME.d.ts +2 -0
- package/lib/esm/build/USER_SCRIPT_OUTPUT_FILENAME.js +3 -0
- package/lib/esm/build/USER_SCRIPT_OUTPUT_FILENAME.js.map +1 -0
- package/lib/esm/build/UserScriptBuildError.d.ts +12 -0
- package/lib/esm/build/UserScriptBuildError.js +23 -0
- package/lib/esm/build/UserScriptBuildError.js.map +1 -0
- package/lib/esm/build/UserScriptBuildResult.d.ts +4 -0
- package/lib/esm/build/UserScriptBuildResult.js +2 -0
- package/lib/esm/build/UserScriptBuildResult.js.map +1 -0
- package/lib/esm/build/__fixtures__/basic/src/helpers/formatSum.d.ts +1 -0
- package/lib/esm/build/__fixtures__/basic/src/helpers/formatSum.js +2 -0
- package/lib/esm/build/__fixtures__/basic/src/helpers/formatSum.js.map +1 -0
- package/lib/esm/build/__fixtures__/basic/src/main.d.ts +4 -0
- package/lib/esm/build/__fixtures__/basic/src/main.js +11 -0
- package/lib/esm/build/__fixtures__/basic/src/main.js.map +1 -0
- package/lib/esm/build/__fixtures__/builtin/src/main.d.ts +1 -0
- package/lib/esm/build/__fixtures__/builtin/src/main.js +3 -0
- package/lib/esm/build/__fixtures__/builtin/src/main.js.map +1 -0
- package/lib/esm/build/__fixtures__/noEntry/src/notMain.d.ts +1 -0
- package/lib/esm/build/__fixtures__/noEntry/src/notMain.js +2 -0
- package/lib/esm/build/__fixtures__/noEntry/src/notMain.js.map +1 -0
- package/lib/esm/build/__fixtures__/nonFunction/src/main.d.ts +2 -0
- package/lib/esm/build/__fixtures__/nonFunction/src/main.js +3 -0
- package/lib/esm/build/__fixtures__/nonFunction/src/main.js.map +1 -0
- package/lib/esm/build/assertUserScriptExports.d.ts +6 -0
- package/lib/esm/build/assertUserScriptExports.js +16 -0
- package/lib/esm/build/assertUserScriptExports.js.map +1 -0
- package/lib/esm/build/buildUserScript.d.ts +15 -0
- package/lib/esm/build/buildUserScript.js +39 -0
- package/lib/esm/build/buildUserScript.js.map +1 -0
- package/lib/esm/build/checkUserScriptOutput.d.ts +7 -0
- package/lib/esm/build/checkUserScriptOutput.js +10 -0
- package/lib/esm/build/checkUserScriptOutput.js.map +1 -0
- package/lib/esm/build/createUserScriptExternals.d.ts +11 -0
- package/lib/esm/build/createUserScriptExternals.js +30 -0
- package/lib/esm/build/createUserScriptExternals.js.map +1 -0
- package/lib/esm/build/getUserScriptRspackConfig.d.ts +15 -0
- package/lib/esm/build/getUserScriptRspackConfig.js +42 -0
- package/lib/esm/build/getUserScriptRspackConfig.js.map +1 -0
- package/lib/esm/build/index.d.ts +13 -0
- package/lib/esm/build/index.js +14 -0
- package/lib/esm/build/index.js.map +1 -0
- package/lib/esm/build/loadRspackModule.d.ts +8 -0
- package/lib/esm/build/loadRspackModule.js +38 -0
- package/lib/esm/build/loadRspackModule.js.map +1 -0
- package/lib/esm/build/resolveUserScriptEntry.d.ts +2 -0
- package/lib/esm/build/resolveUserScriptEntry.js +13 -0
- package/lib/esm/build/resolveUserScriptEntry.js.map +1 -0
- package/lib/esm/build/runUserScriptRspack.d.ts +7 -0
- package/lib/esm/build/runUserScriptRspack.js +19 -0
- package/lib/esm/build/runUserScriptRspack.js.map +1 -0
- package/lib/esm/build/userScriptTsRule.d.ts +6 -0
- package/lib/esm/build/userScriptTsRule.js +17 -0
- package/lib/esm/build/userScriptTsRule.js.map +1 -0
- package/lib/esm/config/USER_SCRIPT_BUILDER_LAYER_MODULES.d.ts +5 -0
- package/lib/esm/config/USER_SCRIPT_BUILDER_LAYER_MODULES.js +6 -0
- package/lib/esm/config/USER_SCRIPT_BUILDER_LAYER_MODULES.js.map +1 -0
- package/lib/esm/config/USER_SCRIPT_BUILDER_LAYER_NAME.d.ts +2 -0
- package/lib/esm/config/USER_SCRIPT_BUILDER_LAYER_NAME.js +3 -0
- package/lib/esm/config/USER_SCRIPT_BUILDER_LAYER_NAME.js.map +1 -0
- package/lib/esm/config/defineUserScriptBuilder.d.ts +7 -0
- package/lib/esm/config/defineUserScriptBuilder.js +12 -0
- package/lib/esm/config/defineUserScriptBuilder.js.map +1 -0
- package/lib/esm/config/getUserScriptBuilderApiLayer.d.ts +7 -0
- package/lib/esm/config/getUserScriptBuilderApiLayer.js +14 -0
- package/lib/esm/config/getUserScriptBuilderApiLayer.js.map +1 -0
- package/lib/esm/config/getUserScriptBuilderLayerDir.d.ts +6 -0
- package/lib/esm/config/getUserScriptBuilderLayerDir.js +26 -0
- package/lib/esm/config/getUserScriptBuilderLayerDir.js.map +1 -0
- package/lib/esm/config/index.d.ts +5 -0
- package/lib/esm/config/index.js +6 -0
- package/lib/esm/config/index.js.map +1 -0
- package/lib/esm/index.d.ts +3 -0
- package/lib/esm/index.js +4 -0
- package/lib/esm/index.js.map +1 -0
- package/package.json +49 -3
package/README.md
CHANGED
|
@@ -1,3 +1,10 @@
|
|
|
1
|
-
#
|
|
1
|
+
# @qpqjs/user-script
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Builds a user-written script project (`src/main.ts` exporting functions) into one CommonJS `main.js` that `askUserScriptExecute` loads from a storage drive, and runs that build on the platform through `askUserScriptBuild`.
|
|
4
|
+
|
|
5
|
+
- `buildUserScript({ projectDir, outDir, sourceMap? })`: the build itself, writing `<outDir>/main.js` and nothing else. Source maps are off by default; `sourceMap: true` embeds one in `main.js` rather than writing a `.map` file. Used by `qpq script:build`, by the platform processors, and by anything else that has the project on disk.
|
|
6
|
+
- `askUserScriptBuild` and `askUserScriptBuildFromZip` processors: the platform build, from a directory of loose files or from one zip file on a drive. Same limits, same output: exactly one file, written to the `outputFilepath` the caller names (an event doc asset path works), which `askUserScriptExecute` is then pointed at.
|
|
7
|
+
- `defineUserScriptBuilder()`: registers both build action processors on a service.
|
|
8
|
+
- `getUserScriptBuilderApiLayer(buildPath)`: the lambda layer entry that provides rspack to that service's functions; `qpq script:builder-layer` produces the directory.
|
|
9
|
+
|
|
10
|
+
Deliberately depends only on core, the node action processors, the config-aws types, rspack, and `yauzl` (a small pure-JavaScript zip reader that streams entries, so unpacked bytes can be capped as they are written), because the processor module is bundled into lambdas.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const getUserScriptBuildActionProcessor: import("@qpqjs/core").ActionProcessorListResolver;
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.getUserScriptBuildActionProcessor = void 0;
|
|
13
|
+
const actionprocessor_node_1 = require("@qpqjs/actionprocessor-node");
|
|
14
|
+
const core_1 = require("@qpqjs/core");
|
|
15
|
+
const crypto_1 = require("crypto");
|
|
16
|
+
const UserScriptBuildError_1 = require("../build/UserScriptBuildError");
|
|
17
|
+
const askUserScriptCheckPublishedOutput_1 = require("./logic/askUserScriptCheckPublishedOutput");
|
|
18
|
+
const askUserScriptCollectSource_1 = require("./logic/askUserScriptCollectSource");
|
|
19
|
+
const askUserScriptPublishOutput_1 = require("./logic/askUserScriptPublishOutput");
|
|
20
|
+
const buildUserScriptInTempDir_1 = require("./logic/buildUserScriptInTempDir");
|
|
21
|
+
const getUserScriptBuildErrorType_1 = require("./logic/getUserScriptBuildErrorType");
|
|
22
|
+
const materialiseUserScriptSource_1 = require("./logic/materialiseUserScriptSource");
|
|
23
|
+
const { errorType } = core_1.askUserScriptBuild;
|
|
24
|
+
const getDateNow = () => new Date().toISOString();
|
|
25
|
+
// Drive failures while collecting the source, re-labelled into this action's catalog; any
|
|
26
|
+
// other failure passes through with its own type.
|
|
27
|
+
const COLLECT_ERROR_TYPES = {
|
|
28
|
+
[core_1.askFileListDirectory.errorType.DirectoryNotFound]: errorType.SourceNotFound,
|
|
29
|
+
[core_1.askFileListDirectory.errorType.DriveNotFound]: errorType.DriveNotFound,
|
|
30
|
+
[core_1.askFileListDirectory.errorType.InvalidScope]: errorType.InvalidScope,
|
|
31
|
+
[core_1.askFileReadTextContents.errorType.InvalidScope]: errorType.InvalidScope,
|
|
32
|
+
};
|
|
33
|
+
const getProcessBuild = (qpqConfig) => {
|
|
34
|
+
return (payload, session, actionProcessors, logger, updateSession, dynamicModuleLoader, streamRegistry) => __awaiter(void 0, void 0, void 0, function* () {
|
|
35
|
+
var _a;
|
|
36
|
+
const resolveStory = (0, core_1.createNestedRuntime)(qpqConfig, session, actionProcessors, getDateNow, logger, crypto_1.randomUUID, core_1.QpqRuntimeType.EXECUTE_STORY, dynamicModuleLoader, undefined, [], streamRegistry);
|
|
37
|
+
// The source and the output both travel through the file actions, so each runtime's
|
|
38
|
+
// own drive implementation serves them; only the build itself touches local disk.
|
|
39
|
+
const collected = yield resolveStory(() => (0, askUserScriptCollectSource_1.askUserScriptCollectSource)(payload.drive, payload.sourceDirectory, payload.scope), []);
|
|
40
|
+
if (collected.error) {
|
|
41
|
+
return (0, core_1.actionResultError)((_a = COLLECT_ERROR_TYPES[collected.error.errorType]) !== null && _a !== void 0 ? _a : collected.error.errorType, collected.error.errorText);
|
|
42
|
+
}
|
|
43
|
+
// The service's own script modules, which the bundler keeps external. One that does not
|
|
44
|
+
// load is the service's fault, so it throws rather than failing the build.
|
|
45
|
+
const hostModules = yield (0, actionprocessor_node_1.loadUserScriptHostModules)(qpqConfig, dynamicModuleLoader);
|
|
46
|
+
let built;
|
|
47
|
+
try {
|
|
48
|
+
built = yield (0, buildUserScriptInTempDir_1.buildUserScriptInTempDir)((projectDir) => (0, materialiseUserScriptSource_1.materialiseUserScriptSource)(projectDir, collected.result), payload.sourceMap, hostModules);
|
|
49
|
+
}
|
|
50
|
+
catch (error) {
|
|
51
|
+
if (error instanceof UserScriptBuildError_1.UserScriptBuildError) {
|
|
52
|
+
return (0, core_1.actionResultError)((0, getUserScriptBuildErrorType_1.getUserScriptBuildErrorType)(error.code, errorType), error.message);
|
|
53
|
+
}
|
|
54
|
+
throw error;
|
|
55
|
+
}
|
|
56
|
+
const published = yield resolveStory(() => (0, askUserScriptPublishOutput_1.askUserScriptPublishOutput)(payload.drive, payload.outputFilepath, built.script, payload.scope), []);
|
|
57
|
+
if (published.error) {
|
|
58
|
+
return (0, core_1.actionResultError)(published.error.errorType, published.error.errorText);
|
|
59
|
+
}
|
|
60
|
+
// The output contract is judged where the script's top-level code cannot reach the host.
|
|
61
|
+
const checked = yield resolveStory(() => (0, askUserScriptCheckPublishedOutput_1.askUserScriptCheckPublishedOutput)(payload.drive, payload.outputFilepath, payload.scope, errorType), []);
|
|
62
|
+
if (checked.error) {
|
|
63
|
+
return (0, core_1.actionResultError)(checked.error.errorType, checked.error.errorText);
|
|
64
|
+
}
|
|
65
|
+
return (0, core_1.actionResult)({ exports: checked.result });
|
|
66
|
+
});
|
|
67
|
+
};
|
|
68
|
+
exports.getUserScriptBuildActionProcessor = (0, core_1.createActionProcessor)(core_1.askUserScriptBuild, getProcessBuild);
|
|
69
|
+
//# sourceMappingURL=getUserScriptBuildActionProcessor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getUserScriptBuildActionProcessor.js","sourceRoot":"","sources":["../../../src/actionProcessor/getUserScriptBuildActionProcessor.ts"],"names":[],"mappings":"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","sourcesContent":["import { loadUserScriptHostModules } from '@qpqjs/actionprocessor-node';\nimport {\n ActionProcessorList,\n actionResult,\n actionResultError,\n askFileListDirectory,\n askFileReadTextContents,\n askUserScriptBuild,\n createActionProcessor,\n createNestedRuntime,\n DynamicModuleLoader,\n ProcessorFor,\n QPQConfig,\n QpqLogger,\n QpqRuntimeType,\n StorySession,\n StorySessionUpdater,\n StreamRegistry,\n UserScriptBuildActionPayload,\n} from '@qpqjs/core';\n\nimport { randomUUID } from 'crypto';\n\nimport { UserScriptBuildError } from '../build/UserScriptBuildError';\nimport { askUserScriptCheckPublishedOutput } from './logic/askUserScriptCheckPublishedOutput';\nimport { askUserScriptCollectSource } from './logic/askUserScriptCollectSource';\nimport { askUserScriptPublishOutput } from './logic/askUserScriptPublishOutput';\nimport { buildUserScriptInTempDir } from './logic/buildUserScriptInTempDir';\nimport { BuiltUserScript } from './logic/BuiltUserScript';\nimport { getUserScriptBuildErrorType } from './logic/getUserScriptBuildErrorType';\nimport { materialiseUserScriptSource } from './logic/materialiseUserScriptSource';\n\nconst { errorType } = askUserScriptBuild;\n\nconst getDateNow = () => new Date().toISOString();\n\n// Drive failures while collecting the source, re-labelled into this action's catalog; any\n// other failure passes through with its own type.\nconst COLLECT_ERROR_TYPES: Record<string, string> = {\n [askFileListDirectory.errorType.DirectoryNotFound]: errorType.SourceNotFound,\n [askFileListDirectory.errorType.DriveNotFound]: errorType.DriveNotFound,\n [askFileListDirectory.errorType.InvalidScope]: errorType.InvalidScope,\n [askFileReadTextContents.errorType.InvalidScope]: errorType.InvalidScope,\n};\n\nconst getProcessBuild = (qpqConfig: QPQConfig): ProcessorFor<typeof askUserScriptBuild> => {\n return async (\n payload: UserScriptBuildActionPayload,\n session: StorySession,\n actionProcessors: ActionProcessorList,\n logger: QpqLogger,\n updateSession: StorySessionUpdater,\n dynamicModuleLoader: DynamicModuleLoader,\n streamRegistry: StreamRegistry,\n ) => {\n const resolveStory = createNestedRuntime(\n qpqConfig,\n session,\n actionProcessors,\n getDateNow,\n logger,\n randomUUID,\n QpqRuntimeType.EXECUTE_STORY,\n dynamicModuleLoader,\n undefined,\n [],\n streamRegistry,\n );\n\n // The source and the output both travel through the file actions, so each runtime's\n // own drive implementation serves them; only the build itself touches local disk.\n const collected = await resolveStory(() => askUserScriptCollectSource(payload.drive, payload.sourceDirectory, payload.scope), []);\n if (collected.error) {\n return actionResultError(COLLECT_ERROR_TYPES[collected.error.errorType] ?? collected.error.errorType, collected.error.errorText);\n }\n\n // The service's own script modules, which the bundler keeps external. One that does not\n // load is the service's fault, so it throws rather than failing the build.\n const hostModules = await loadUserScriptHostModules(qpqConfig, dynamicModuleLoader);\n\n let built: BuiltUserScript;\n try {\n built = await buildUserScriptInTempDir(\n (projectDir) => materialiseUserScriptSource(projectDir, collected.result),\n payload.sourceMap,\n hostModules,\n );\n } catch (error) {\n if (error instanceof UserScriptBuildError) {\n return actionResultError(getUserScriptBuildErrorType(error.code, errorType), error.message);\n }\n throw error;\n }\n\n const published = await resolveStory(() => askUserScriptPublishOutput(payload.drive, payload.outputFilepath, built.script, payload.scope), []);\n if (published.error) {\n return actionResultError(published.error.errorType, published.error.errorText);\n }\n\n // The output contract is judged where the script's top-level code cannot reach the host.\n const checked = await resolveStory(() => askUserScriptCheckPublishedOutput(payload.drive, payload.outputFilepath, payload.scope, errorType), []);\n if (checked.error) {\n return actionResultError(checked.error.errorType, checked.error.errorText);\n }\n\n return actionResult({ exports: checked.result });\n };\n};\n\nexport const getUserScriptBuildActionProcessor = createActionProcessor(askUserScriptBuild, getProcessBuild);\n"]}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.getUserScriptBuildActionProcessors = void 0;
|
|
13
|
+
const getUserScriptBuildActionProcessor_1 = require("./getUserScriptBuildActionProcessor");
|
|
14
|
+
const getUserScriptBuildFromZipActionProcessor_1 = require("./getUserScriptBuildFromZipActionProcessor");
|
|
15
|
+
/** The resolver defineUserScriptBuilder points a service at: both build actions, from a directory and from a zip. */
|
|
16
|
+
const getUserScriptBuildActionProcessors = (qpqConfig, dynamicModuleLoader) => __awaiter(void 0, void 0, void 0, function* () {
|
|
17
|
+
return (Object.assign(Object.assign({}, (yield (0, getUserScriptBuildActionProcessor_1.getUserScriptBuildActionProcessor)(qpqConfig, dynamicModuleLoader))), (yield (0, getUserScriptBuildFromZipActionProcessor_1.getUserScriptBuildFromZipActionProcessor)(qpqConfig, dynamicModuleLoader))));
|
|
18
|
+
});
|
|
19
|
+
exports.getUserScriptBuildActionProcessors = getUserScriptBuildActionProcessors;
|
|
20
|
+
//# sourceMappingURL=getUserScriptBuildActionProcessors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getUserScriptBuildActionProcessors.js","sourceRoot":"","sources":["../../../src/actionProcessor/getUserScriptBuildActionProcessors.ts"],"names":[],"mappings":";;;;;;;;;;;;AAEA,2FAAwF;AACxF,yGAAsG;AAEtG,qHAAqH;AAC9G,MAAM,kCAAkC,GAAgC,CAC7E,SAAoB,EACpB,mBAAwC,EACV,EAAE;IAAC,OAAA,iCAC9B,CAAC,MAAM,IAAA,qEAAiC,EAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC,GACzE,CAAC,MAAM,IAAA,mFAAwC,EAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC,EACnF,CAAA;EAAA,CAAC;AANU,QAAA,kCAAkC,sCAM5C","sourcesContent":["import { ActionProcessorList, ActionProcessorListResolver, DynamicModuleLoader, QPQConfig } from '@qpqjs/core';\n\nimport { getUserScriptBuildActionProcessor } from './getUserScriptBuildActionProcessor';\nimport { getUserScriptBuildFromZipActionProcessor } from './getUserScriptBuildFromZipActionProcessor';\n\n/** The resolver defineUserScriptBuilder points a service at: both build actions, from a directory and from a zip. */\nexport const getUserScriptBuildActionProcessors: ActionProcessorListResolver = async (\n qpqConfig: QPQConfig,\n dynamicModuleLoader: DynamicModuleLoader,\n): Promise<ActionProcessorList> => ({\n ...(await getUserScriptBuildActionProcessor(qpqConfig, dynamicModuleLoader)),\n ...(await getUserScriptBuildFromZipActionProcessor(qpqConfig, dynamicModuleLoader)),\n});\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const getUserScriptBuildFromZipActionProcessor: import("@qpqjs/core").ActionProcessorListResolver;
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.getUserScriptBuildFromZipActionProcessor = void 0;
|
|
13
|
+
const actionprocessor_node_1 = require("@qpqjs/actionprocessor-node");
|
|
14
|
+
const core_1 = require("@qpqjs/core");
|
|
15
|
+
const crypto_1 = require("crypto");
|
|
16
|
+
const UserScriptBuildError_1 = require("../build/UserScriptBuildError");
|
|
17
|
+
const askUserScriptCheckPublishedOutput_1 = require("./logic/askUserScriptCheckPublishedOutput");
|
|
18
|
+
const askUserScriptPublishOutput_1 = require("./logic/askUserScriptPublishOutput");
|
|
19
|
+
const buildUserScriptInTempDir_1 = require("./logic/buildUserScriptInTempDir");
|
|
20
|
+
const extractUserScriptZip_1 = require("./logic/extractUserScriptZip");
|
|
21
|
+
const getUserScriptBuildErrorType_1 = require("./logic/getUserScriptBuildErrorType");
|
|
22
|
+
const USER_SCRIPT_SOURCE_LIMITS_1 = require("./logic/USER_SCRIPT_SOURCE_LIMITS");
|
|
23
|
+
const UserScriptArchiveError_1 = require("./logic/UserScriptArchiveError");
|
|
24
|
+
const { errorType } = core_1.askUserScriptBuildFromZip;
|
|
25
|
+
const getDateNow = () => new Date().toISOString();
|
|
26
|
+
// Drive failures while reading the zip, re-labelled into this action's catalog; any other
|
|
27
|
+
// failure passes through with its own type.
|
|
28
|
+
const READ_ERROR_TYPES = {
|
|
29
|
+
[core_1.askFileReadBinaryContents.errorType.FileNotFound]: errorType.SourceNotFound,
|
|
30
|
+
[core_1.askFileReadBinaryContents.errorType.InvalidScope]: errorType.InvalidScope,
|
|
31
|
+
};
|
|
32
|
+
// The archive error codes are named after the action's own catalog.
|
|
33
|
+
const getArchiveErrorType = (error) => errorType[error.code];
|
|
34
|
+
const getProcessBuildFromZip = (qpqConfig) => {
|
|
35
|
+
return (payload, session, actionProcessors, logger, updateSession, dynamicModuleLoader, streamRegistry) => __awaiter(void 0, void 0, void 0, function* () {
|
|
36
|
+
var _a;
|
|
37
|
+
const resolveStory = (0, core_1.createNestedRuntime)(qpqConfig, session, actionProcessors, getDateNow, logger, crypto_1.randomUUID, core_1.QpqRuntimeType.EXECUTE_STORY, dynamicModuleLoader, undefined, [], streamRegistry);
|
|
38
|
+
const read = yield resolveStory(() => (0, core_1.askFileReadBinaryContents)(payload.drive, payload.zipFilepath, payload.scope), []);
|
|
39
|
+
if (read.error) {
|
|
40
|
+
return (0, core_1.actionResultError)((_a = READ_ERROR_TYPES[read.error.errorType]) !== null && _a !== void 0 ? _a : read.error.errorType, read.error.errorText);
|
|
41
|
+
}
|
|
42
|
+
// The file actions give no size without the bytes, so the zip's own cap applies to
|
|
43
|
+
// what came back before anything is unpacked.
|
|
44
|
+
const zip = Buffer.from(read.result.base64Data, 'base64');
|
|
45
|
+
if (zip.length > USER_SCRIPT_SOURCE_LIMITS_1.USER_SCRIPT_SOURCE_LIMITS.maxBytes) {
|
|
46
|
+
return (0, core_1.actionResultError)(errorType.SourceTooLarge, `[${payload.drive}:${payload.zipFilepath}] is larger than ${USER_SCRIPT_SOURCE_LIMITS_1.USER_SCRIPT_SOURCE_LIMITS.maxBytes} bytes`);
|
|
47
|
+
}
|
|
48
|
+
// The service's own script modules, which the bundler keeps external. One that does not
|
|
49
|
+
// load is the service's fault, so it throws rather than failing the build.
|
|
50
|
+
const hostModules = yield (0, actionprocessor_node_1.loadUserScriptHostModules)(qpqConfig, dynamicModuleLoader);
|
|
51
|
+
let built;
|
|
52
|
+
try {
|
|
53
|
+
built = yield (0, buildUserScriptInTempDir_1.buildUserScriptInTempDir)((projectDir) => __awaiter(void 0, void 0, void 0, function* () {
|
|
54
|
+
yield (0, extractUserScriptZip_1.extractUserScriptZip)(zip, projectDir);
|
|
55
|
+
}), payload.sourceMap, hostModules);
|
|
56
|
+
}
|
|
57
|
+
catch (error) {
|
|
58
|
+
if (error instanceof UserScriptArchiveError_1.UserScriptArchiveError) {
|
|
59
|
+
return (0, core_1.actionResultError)(getArchiveErrorType(error), `[${payload.drive}:${payload.zipFilepath}] ${error.message}`);
|
|
60
|
+
}
|
|
61
|
+
if (error instanceof UserScriptBuildError_1.UserScriptBuildError) {
|
|
62
|
+
return (0, core_1.actionResultError)((0, getUserScriptBuildErrorType_1.getUserScriptBuildErrorType)(error.code, errorType), error.message);
|
|
63
|
+
}
|
|
64
|
+
throw error;
|
|
65
|
+
}
|
|
66
|
+
const published = yield resolveStory(() => (0, askUserScriptPublishOutput_1.askUserScriptPublishOutput)(payload.drive, payload.outputFilepath, built.script, payload.scope), []);
|
|
67
|
+
if (published.error) {
|
|
68
|
+
return (0, core_1.actionResultError)(published.error.errorType, published.error.errorText);
|
|
69
|
+
}
|
|
70
|
+
// The output contract is judged where the script's top-level code cannot reach the host.
|
|
71
|
+
const checked = yield resolveStory(() => (0, askUserScriptCheckPublishedOutput_1.askUserScriptCheckPublishedOutput)(payload.drive, payload.outputFilepath, payload.scope, errorType), []);
|
|
72
|
+
if (checked.error) {
|
|
73
|
+
return (0, core_1.actionResultError)(checked.error.errorType, checked.error.errorText);
|
|
74
|
+
}
|
|
75
|
+
return (0, core_1.actionResult)({ exports: checked.result });
|
|
76
|
+
});
|
|
77
|
+
};
|
|
78
|
+
exports.getUserScriptBuildFromZipActionProcessor = (0, core_1.createActionProcessor)(core_1.askUserScriptBuildFromZip, getProcessBuildFromZip);
|
|
79
|
+
//# sourceMappingURL=getUserScriptBuildFromZipActionProcessor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getUserScriptBuildFromZipActionProcessor.js","sourceRoot":"","sources":["../../../src/actionProcessor/getUserScriptBuildFromZipActionProcessor.ts"],"names":[],"mappings":"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","sourcesContent":["import { loadUserScriptHostModules } from '@qpqjs/actionprocessor-node';\nimport {\n ActionProcessorList,\n actionResult,\n actionResultError,\n askFileReadBinaryContents,\n askUserScriptBuildFromZip,\n createActionProcessor,\n createNestedRuntime,\n DynamicModuleLoader,\n ProcessorFor,\n QPQConfig,\n QpqLogger,\n QpqRuntimeType,\n StorySession,\n StorySessionUpdater,\n StreamRegistry,\n UserScriptBuildFromZipActionPayload,\n} from '@qpqjs/core';\n\nimport { randomUUID } from 'crypto';\n\nimport { UserScriptBuildError } from '../build/UserScriptBuildError';\nimport { askUserScriptCheckPublishedOutput } from './logic/askUserScriptCheckPublishedOutput';\nimport { askUserScriptPublishOutput } from './logic/askUserScriptPublishOutput';\nimport { buildUserScriptInTempDir } from './logic/buildUserScriptInTempDir';\nimport { BuiltUserScript } from './logic/BuiltUserScript';\nimport { extractUserScriptZip } from './logic/extractUserScriptZip';\nimport { getUserScriptBuildErrorType } from './logic/getUserScriptBuildErrorType';\nimport { USER_SCRIPT_SOURCE_LIMITS } from './logic/USER_SCRIPT_SOURCE_LIMITS';\nimport { UserScriptArchiveError } from './logic/UserScriptArchiveError';\n\nconst { errorType } = askUserScriptBuildFromZip;\n\nconst getDateNow = () => new Date().toISOString();\n\n// Drive failures while reading the zip, re-labelled into this action's catalog; any other\n// failure passes through with its own type.\nconst READ_ERROR_TYPES: Record<string, string> = {\n [askFileReadBinaryContents.errorType.FileNotFound]: errorType.SourceNotFound,\n [askFileReadBinaryContents.errorType.InvalidScope]: errorType.InvalidScope,\n};\n\n// The archive error codes are named after the action's own catalog.\nconst getArchiveErrorType = (error: UserScriptArchiveError): string => errorType[error.code];\n\nconst getProcessBuildFromZip = (qpqConfig: QPQConfig): ProcessorFor<typeof askUserScriptBuildFromZip> => {\n return async (\n payload: UserScriptBuildFromZipActionPayload,\n session: StorySession,\n actionProcessors: ActionProcessorList,\n logger: QpqLogger,\n updateSession: StorySessionUpdater,\n dynamicModuleLoader: DynamicModuleLoader,\n streamRegistry: StreamRegistry,\n ) => {\n const resolveStory = createNestedRuntime(\n qpqConfig,\n session,\n actionProcessors,\n getDateNow,\n logger,\n randomUUID,\n QpqRuntimeType.EXECUTE_STORY,\n dynamicModuleLoader,\n undefined,\n [],\n streamRegistry,\n );\n\n const read = await resolveStory(() => askFileReadBinaryContents(payload.drive, payload.zipFilepath, payload.scope), []);\n if (read.error) {\n return actionResultError(READ_ERROR_TYPES[read.error.errorType] ?? read.error.errorType, read.error.errorText);\n }\n\n // The file actions give no size without the bytes, so the zip's own cap applies to\n // what came back before anything is unpacked.\n const zip = Buffer.from(read.result.base64Data, 'base64');\n if (zip.length > USER_SCRIPT_SOURCE_LIMITS.maxBytes) {\n return actionResultError(\n errorType.SourceTooLarge,\n `[${payload.drive}:${payload.zipFilepath}] is larger than ${USER_SCRIPT_SOURCE_LIMITS.maxBytes} bytes`,\n );\n }\n\n // The service's own script modules, which the bundler keeps external. One that does not\n // load is the service's fault, so it throws rather than failing the build.\n const hostModules = await loadUserScriptHostModules(qpqConfig, dynamicModuleLoader);\n\n let built: BuiltUserScript;\n try {\n built = await buildUserScriptInTempDir(\n async (projectDir) => {\n await extractUserScriptZip(zip, projectDir);\n },\n payload.sourceMap,\n hostModules,\n );\n } catch (error) {\n if (error instanceof UserScriptArchiveError) {\n return actionResultError(getArchiveErrorType(error), `[${payload.drive}:${payload.zipFilepath}] ${error.message}`);\n }\n if (error instanceof UserScriptBuildError) {\n return actionResultError(getUserScriptBuildErrorType(error.code, errorType), error.message);\n }\n throw error;\n }\n\n const published = await resolveStory(() => askUserScriptPublishOutput(payload.drive, payload.outputFilepath, built.script, payload.scope), []);\n if (published.error) {\n return actionResultError(published.error.errorType, published.error.errorText);\n }\n\n // The output contract is judged where the script's top-level code cannot reach the host.\n const checked = await resolveStory(() => askUserScriptCheckPublishedOutput(payload.drive, payload.outputFilepath, payload.scope, errorType), []);\n if (checked.error) {\n return actionResultError(checked.error.errorType, checked.error.errorText);\n }\n\n return actionResult({ exports: checked.result });\n };\n};\n\nexport const getUserScriptBuildFromZipActionProcessor = createActionProcessor(askUserScriptBuildFromZip, getProcessBuildFromZip);\n"]}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./getUserScriptBuildActionProcessor"), exports);
|
|
18
|
+
__exportStar(require("./getUserScriptBuildActionProcessors"), exports);
|
|
19
|
+
__exportStar(require("./getUserScriptBuildFromZipActionProcessor"), exports);
|
|
20
|
+
__exportStar(require("./logic"), exports);
|
|
21
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/actionProcessor/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,sEAAoD;AACpD,uEAAqD;AACrD,6EAA2D;AAC3D,0CAAwB","sourcesContent":["export * from './getUserScriptBuildActionProcessor';\nexport * from './getUserScriptBuildActionProcessors';\nexport * from './getUserScriptBuildFromZipActionProcessor';\nexport * from './logic';\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BuiltUserScript.js","sourceRoot":"","sources":["../../../../src/actionProcessor/logic/BuiltUserScript.ts"],"names":[],"mappings":"","sourcesContent":["/** A finished build, read back from disk, ready to publish to a drive. */\nexport type BuiltUserScript = {\n // The built JavaScript, with its source map embedded when one was asked for.\n script: string;\n};\n"]}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.USER_SCRIPT_SOURCE_LIMITS = void 0;
|
|
4
|
+
/** Caps on a script project pulled off a drive, so a build cannot exhaust the lambda it runs on. */
|
|
5
|
+
exports.USER_SCRIPT_SOURCE_LIMITS = {
|
|
6
|
+
maxFiles: 200,
|
|
7
|
+
maxBytes: 2 * 1024 * 1024,
|
|
8
|
+
};
|
|
9
|
+
//# sourceMappingURL=USER_SCRIPT_SOURCE_LIMITS.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"USER_SCRIPT_SOURCE_LIMITS.js","sourceRoot":"","sources":["../../../../src/actionProcessor/logic/USER_SCRIPT_SOURCE_LIMITS.ts"],"names":[],"mappings":";;;AAAA,oGAAoG;AACvF,QAAA,yBAAyB,GAAG;IACvC,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,CAAC,GAAG,IAAI,GAAG,IAAI;CACjB,CAAC","sourcesContent":["/** Caps on a script project pulled off a drive, so a build cannot exhaust the lambda it runs on. */\nexport const USER_SCRIPT_SOURCE_LIMITS = {\n maxFiles: 200,\n maxBytes: 2 * 1024 * 1024,\n} as const;\n"]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export declare enum UserScriptArchiveErrorCode {
|
|
2
|
+
InvalidArchive = "InvalidArchive",
|
|
3
|
+
UnsafeArchiveEntry = "UnsafeArchiveEntry",
|
|
4
|
+
SourceTooLarge = "SourceTooLarge"
|
|
5
|
+
}
|
|
6
|
+
/** Thrown by extractUserScriptZip; `code` names which rule the archive broke. */
|
|
7
|
+
export declare class UserScriptArchiveError extends Error {
|
|
8
|
+
readonly code: UserScriptArchiveErrorCode;
|
|
9
|
+
constructor(code: UserScriptArchiveErrorCode, message: string);
|
|
10
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.UserScriptArchiveError = exports.UserScriptArchiveErrorCode = void 0;
|
|
4
|
+
var UserScriptArchiveErrorCode;
|
|
5
|
+
(function (UserScriptArchiveErrorCode) {
|
|
6
|
+
// Not a zip this runtime can read, or an entry is encrypted or corrupt.
|
|
7
|
+
UserScriptArchiveErrorCode["InvalidArchive"] = "InvalidArchive";
|
|
8
|
+
// An entry path would escape the project, or an entry is a symlink.
|
|
9
|
+
UserScriptArchiveErrorCode["UnsafeArchiveEntry"] = "UnsafeArchiveEntry";
|
|
10
|
+
// Too many files, too many unpacked bytes, or a node_modules folder.
|
|
11
|
+
UserScriptArchiveErrorCode["SourceTooLarge"] = "SourceTooLarge";
|
|
12
|
+
})(UserScriptArchiveErrorCode || (exports.UserScriptArchiveErrorCode = UserScriptArchiveErrorCode = {}));
|
|
13
|
+
/** Thrown by extractUserScriptZip; `code` names which rule the archive broke. */
|
|
14
|
+
class UserScriptArchiveError extends Error {
|
|
15
|
+
constructor(code, message) {
|
|
16
|
+
super(message);
|
|
17
|
+
this.code = code;
|
|
18
|
+
this.name = 'UserScriptArchiveError';
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
exports.UserScriptArchiveError = UserScriptArchiveError;
|
|
22
|
+
//# sourceMappingURL=UserScriptArchiveError.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UserScriptArchiveError.js","sourceRoot":"","sources":["../../../../src/actionProcessor/logic/UserScriptArchiveError.ts"],"names":[],"mappings":";;;AAAA,IAAY,0BAOX;AAPD,WAAY,0BAA0B;IACpC,wEAAwE;IACxE,+DAAiC,CAAA;IACjC,oEAAoE;IACpE,uEAAyC,CAAA;IACzC,qEAAqE;IACrE,+DAAiC,CAAA;AACnC,CAAC,EAPW,0BAA0B,0CAA1B,0BAA0B,QAOrC;AAED,iFAAiF;AACjF,MAAa,sBAAuB,SAAQ,KAAK;IAC/C,YACkB,IAAgC,EAChD,OAAe;QAEf,KAAK,CAAC,OAAO,CAAC,CAAC;QAHC,SAAI,GAAJ,IAAI,CAA4B;QAIhD,IAAI,CAAC,IAAI,GAAG,wBAAwB,CAAC;IACvC,CAAC;CACF;AARD,wDAQC","sourcesContent":["export enum UserScriptArchiveErrorCode {\n // Not a zip this runtime can read, or an entry is encrypted or corrupt.\n InvalidArchive = 'InvalidArchive',\n // An entry path would escape the project, or an entry is a symlink.\n UnsafeArchiveEntry = 'UnsafeArchiveEntry',\n // Too many files, too many unpacked bytes, or a node_modules folder.\n SourceTooLarge = 'SourceTooLarge',\n}\n\n/** Thrown by extractUserScriptZip; `code` names which rule the archive broke. */\nexport class UserScriptArchiveError extends Error {\n constructor(\n public readonly code: UserScriptArchiveErrorCode,\n message: string,\n ) {\n super(message);\n this.name = 'UserScriptArchiveError';\n }\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UserScriptSourceFile.js","sourceRoot":"","sources":["../../../../src/actionProcessor/logic/UserScriptSourceFile.ts"],"names":[],"mappings":"","sourcesContent":["/** One file of a script project pulled off a drive: its path relative to the project root, and its text. */\nexport type UserScriptSourceFile = {\n path: string;\n text: string;\n};\n"]}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { AskResponse } from '@qpqjs/core';
|
|
2
|
+
import { UserScriptBuildErrorCatalog } from './getUserScriptBuildErrorType';
|
|
3
|
+
/**
|
|
4
|
+
* The output contract for a platform build, judged inside the sandbox: the runner loads the
|
|
5
|
+
* published file and reports its exports, and the rule is applied here. A load failure is the
|
|
6
|
+
* build's fault (BuildFailed); a runner failure keeps its own type.
|
|
7
|
+
*/
|
|
8
|
+
export declare function askUserScriptCheckPublishedOutput(drive: string, filepath: string, scope: string | undefined, errorType: UserScriptBuildErrorCatalog): AskResponse<string[]>;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.askUserScriptCheckPublishedOutput = askUserScriptCheckPublishedOutput;
|
|
4
|
+
const core_1 = require("@qpqjs/core");
|
|
5
|
+
const assertUserScriptExports_1 = require("../../build/assertUserScriptExports");
|
|
6
|
+
const UserScriptBuildError_1 = require("../../build/UserScriptBuildError");
|
|
7
|
+
/**
|
|
8
|
+
* The output contract for a platform build, judged inside the sandbox: the runner loads the
|
|
9
|
+
* published file and reports its exports, and the rule is applied here. A load failure is the
|
|
10
|
+
* build's fault (BuildFailed); a runner failure keeps its own type.
|
|
11
|
+
*/
|
|
12
|
+
function* askUserScriptCheckPublishedOutput(drive, filepath, scope, errorType) {
|
|
13
|
+
const listed = yield* (0, core_1.askCatch)((0, core_1.askUserScriptListExports)(drive, filepath, scope));
|
|
14
|
+
if (!listed.success) {
|
|
15
|
+
const loadFailed = listed.error.errorType === core_1.askUserScriptListExports.errorType.ModuleNotFound ||
|
|
16
|
+
listed.error.errorType === core_1.askUserScriptListExports.errorType.ScriptInvalid;
|
|
17
|
+
return yield* (0, core_1.askThrowError)(loadFailed ? errorType.BuildFailed : listed.error.errorType, listed.error.errorText);
|
|
18
|
+
}
|
|
19
|
+
try {
|
|
20
|
+
return (0, assertUserScriptExports_1.assertUserScriptExports)(filepath, listed.result);
|
|
21
|
+
}
|
|
22
|
+
catch (error) {
|
|
23
|
+
if (error instanceof UserScriptBuildError_1.UserScriptBuildError) {
|
|
24
|
+
const code = error.code;
|
|
25
|
+
return yield* (0, core_1.askThrowError)(errorType[code], error.message);
|
|
26
|
+
}
|
|
27
|
+
throw error;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=askUserScriptCheckPublishedOutput.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"askUserScriptCheckPublishedOutput.js","sourceRoot":"","sources":["../../../../src/actionProcessor/logic/askUserScriptCheckPublishedOutput.ts"],"names":[],"mappings":";;AAWA,8EAuBC;AAlCD,sCAA6F;AAE7F,iFAA8E;AAC9E,2EAAkG;AAGlG;;;;GAIG;AACH,QAAe,CAAC,CAAC,iCAAiC,CAChD,KAAa,EACb,QAAgB,EAChB,KAAyB,EACzB,SAAsC;IAEtC,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,IAAA,eAAQ,EAAC,IAAA,+BAAwB,EAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;IACjF,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,UAAU,GACd,MAAM,CAAC,KAAK,CAAC,SAAS,KAAK,+BAAwB,CAAC,SAAS,CAAC,cAAc;YAC5E,MAAM,CAAC,KAAK,CAAC,SAAS,KAAK,+BAAwB,CAAC,SAAS,CAAC,aAAa,CAAC;QAC9E,OAAO,KAAK,CAAC,CAAC,IAAA,oBAAa,EAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IACnH,CAAC;IAED,IAAI,CAAC;QACH,OAAO,IAAA,iDAAuB,EAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IAC1D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,2CAAoB,EAAE,CAAC;YAC1C,MAAM,IAAI,GAAG,KAAK,CAAC,IAAuF,CAAC;YAC3G,OAAO,KAAK,CAAC,CAAC,IAAA,oBAAa,EAAC,SAAS,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QAC9D,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC","sourcesContent":["import { askCatch, AskResponse, askThrowError, askUserScriptListExports } from '@qpqjs/core';\n\nimport { assertUserScriptExports } from '../../build/assertUserScriptExports';\nimport { UserScriptBuildError, UserScriptBuildErrorCode } from '../../build/UserScriptBuildError';\nimport { UserScriptBuildErrorCatalog } from './getUserScriptBuildErrorType';\n\n/**\n * The output contract for a platform build, judged inside the sandbox: the runner loads the\n * published file and reports its exports, and the rule is applied here. A load failure is the\n * build's fault (BuildFailed); a runner failure keeps its own type.\n */\nexport function* askUserScriptCheckPublishedOutput(\n drive: string,\n filepath: string,\n scope: string | undefined,\n errorType: UserScriptBuildErrorCatalog,\n): AskResponse<string[]> {\n const listed = yield* askCatch(askUserScriptListExports(drive, filepath, scope));\n if (!listed.success) {\n const loadFailed =\n listed.error.errorType === askUserScriptListExports.errorType.ModuleNotFound ||\n listed.error.errorType === askUserScriptListExports.errorType.ScriptInvalid;\n return yield* askThrowError(loadFailed ? errorType.BuildFailed : listed.error.errorType, listed.error.errorText);\n }\n\n try {\n return assertUserScriptExports(filepath, listed.result);\n } catch (error) {\n if (error instanceof UserScriptBuildError) {\n const code = error.code as UserScriptBuildErrorCode.NoExports | UserScriptBuildErrorCode.NonFunctionExport;\n return yield* askThrowError(errorType[code], error.message);\n }\n throw error;\n }\n}\n"]}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { AskResponse } from '@qpqjs/core';
|
|
2
|
+
import { UserScriptSourceFile } from './UserScriptSourceFile';
|
|
3
|
+
/**
|
|
4
|
+
* Reads a script project off a drive: every file under `sourceDirectory`, recursively, as
|
|
5
|
+
* text with paths relative to the project root. Refuses a node_modules folder and enforces
|
|
6
|
+
* USER_SCRIPT_SOURCE_LIMITS, both as the build action's SourceTooLarge. Listing and read
|
|
7
|
+
* failures propagate with their own types for the processor to re-label.
|
|
8
|
+
*/
|
|
9
|
+
export declare function askUserScriptCollectSource(drive: string, sourceDirectory: string, scope?: string): AskResponse<UserScriptSourceFile[]>;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.askUserScriptCollectSource = askUserScriptCollectSource;
|
|
4
|
+
const core_1 = require("@qpqjs/core");
|
|
5
|
+
const USER_SCRIPT_SOURCE_LIMITS_1 = require("./USER_SCRIPT_SOURCE_LIMITS");
|
|
6
|
+
const REFUSED_DIRECTORY = 'node_modules';
|
|
7
|
+
const trimSlashes = (directory) => directory.replace(/^\/+|\/+$/g, '');
|
|
8
|
+
const toProjectRelative = (sourceDirectory, filepath) => {
|
|
9
|
+
const prefix = `${sourceDirectory}/`;
|
|
10
|
+
return filepath.startsWith(prefix) ? filepath.slice(prefix.length) : filepath;
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* Reads a script project off a drive: every file under `sourceDirectory`, recursively, as
|
|
14
|
+
* text with paths relative to the project root. Refuses a node_modules folder and enforces
|
|
15
|
+
* USER_SCRIPT_SOURCE_LIMITS, both as the build action's SourceTooLarge. Listing and read
|
|
16
|
+
* failures propagate with their own types for the processor to re-label.
|
|
17
|
+
*/
|
|
18
|
+
function* askUserScriptCollectSource(drive, sourceDirectory, scope) {
|
|
19
|
+
const root = trimSlashes(sourceDirectory);
|
|
20
|
+
const pending = [root];
|
|
21
|
+
const filePaths = [];
|
|
22
|
+
while (pending.length > 0) {
|
|
23
|
+
const directory = pending.shift();
|
|
24
|
+
const entries = yield* (0, core_1.askFileListAllDirectory)(drive, directory, scope);
|
|
25
|
+
for (const entry of entries) {
|
|
26
|
+
const relative = toProjectRelative(root, entry.filepath);
|
|
27
|
+
if (relative.split('/').includes(REFUSED_DIRECTORY)) {
|
|
28
|
+
return yield* (0, core_1.askThrowError)(core_1.askUserScriptBuild.errorType.SourceTooLarge, `[${drive}:${root}] contains a ${REFUSED_DIRECTORY} folder; dependencies are not supported in a user script yet`);
|
|
29
|
+
}
|
|
30
|
+
if (entry.isDir) {
|
|
31
|
+
pending.push(trimSlashes(entry.filepath));
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
filePaths.push(entry.filepath);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
if (filePaths.length > USER_SCRIPT_SOURCE_LIMITS_1.USER_SCRIPT_SOURCE_LIMITS.maxFiles) {
|
|
38
|
+
return yield* (0, core_1.askThrowError)(core_1.askUserScriptBuild.errorType.SourceTooLarge, `[${drive}:${root}] has more than ${USER_SCRIPT_SOURCE_LIMITS_1.USER_SCRIPT_SOURCE_LIMITS.maxFiles} files`);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
const files = [];
|
|
42
|
+
let totalBytes = 0;
|
|
43
|
+
for (const filepath of filePaths) {
|
|
44
|
+
const text = yield* (0, core_1.askFileReadTextContents)(drive, filepath, scope);
|
|
45
|
+
totalBytes += Buffer.byteLength(text, 'utf8');
|
|
46
|
+
if (totalBytes > USER_SCRIPT_SOURCE_LIMITS_1.USER_SCRIPT_SOURCE_LIMITS.maxBytes) {
|
|
47
|
+
return yield* (0, core_1.askThrowError)(core_1.askUserScriptBuild.errorType.SourceTooLarge, `[${drive}:${root}] is larger than ${USER_SCRIPT_SOURCE_LIMITS_1.USER_SCRIPT_SOURCE_LIMITS.maxBytes} bytes`);
|
|
48
|
+
}
|
|
49
|
+
files.push({ path: toProjectRelative(root, filepath), text });
|
|
50
|
+
}
|
|
51
|
+
return files;
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=askUserScriptCollectSource.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"askUserScriptCollectSource.js","sourceRoot":"","sources":["../../../../src/actionProcessor/logic/askUserScriptCollectSource.ts"],"names":[],"mappings":"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","sourcesContent":["import { askFileListAllDirectory, askFileReadTextContents, AskResponse, askThrowError, askUserScriptBuild } from '@qpqjs/core';\n\nimport { USER_SCRIPT_SOURCE_LIMITS } from './USER_SCRIPT_SOURCE_LIMITS';\nimport { UserScriptSourceFile } from './UserScriptSourceFile';\n\nconst REFUSED_DIRECTORY = 'node_modules';\n\nconst trimSlashes = (directory: string): string => directory.replace(/^\\/+|\\/+$/g, '');\n\nconst toProjectRelative = (sourceDirectory: string, filepath: string): string => {\n const prefix = `${sourceDirectory}/`;\n return filepath.startsWith(prefix) ? filepath.slice(prefix.length) : filepath;\n};\n\n/**\n * Reads a script project off a drive: every file under `sourceDirectory`, recursively, as\n * text with paths relative to the project root. Refuses a node_modules folder and enforces\n * USER_SCRIPT_SOURCE_LIMITS, both as the build action's SourceTooLarge. Listing and read\n * failures propagate with their own types for the processor to re-label.\n */\nexport function* askUserScriptCollectSource(drive: string, sourceDirectory: string, scope?: string): AskResponse<UserScriptSourceFile[]> {\n const root = trimSlashes(sourceDirectory);\n const pending: string[] = [root];\n const filePaths: string[] = [];\n\n while (pending.length > 0) {\n const directory = pending.shift() as string;\n const entries = yield* askFileListAllDirectory(drive, directory, scope);\n\n for (const entry of entries) {\n const relative = toProjectRelative(root, entry.filepath);\n if (relative.split('/').includes(REFUSED_DIRECTORY)) {\n return yield* askThrowError(\n askUserScriptBuild.errorType.SourceTooLarge,\n `[${drive}:${root}] contains a ${REFUSED_DIRECTORY} folder; dependencies are not supported in a user script yet`,\n );\n }\n\n if (entry.isDir) {\n pending.push(trimSlashes(entry.filepath));\n } else {\n filePaths.push(entry.filepath);\n }\n }\n\n if (filePaths.length > USER_SCRIPT_SOURCE_LIMITS.maxFiles) {\n return yield* askThrowError(\n askUserScriptBuild.errorType.SourceTooLarge,\n `[${drive}:${root}] has more than ${USER_SCRIPT_SOURCE_LIMITS.maxFiles} files`,\n );\n }\n }\n\n const files: UserScriptSourceFile[] = [];\n let totalBytes = 0;\n for (const filepath of filePaths) {\n const text = yield* askFileReadTextContents(drive, filepath, scope);\n totalBytes += Buffer.byteLength(text, 'utf8');\n if (totalBytes > USER_SCRIPT_SOURCE_LIMITS.maxBytes) {\n return yield* askThrowError(\n askUserScriptBuild.errorType.SourceTooLarge,\n `[${drive}:${root}] is larger than ${USER_SCRIPT_SOURCE_LIMITS.maxBytes} bytes`,\n );\n }\n files.push({ path: toProjectRelative(root, filepath), text });\n }\n\n return files;\n}\n"]}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { AskResponse } from '@qpqjs/core';
|
|
2
|
+
/** Writes a built script to exactly `outputFilepath` on a drive; a build publishes nothing else. */
|
|
3
|
+
export declare function askUserScriptPublishOutput(drive: string, outputFilepath: string, script: string, scope?: string): AskResponse<void>;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.askUserScriptPublishOutput = askUserScriptPublishOutput;
|
|
4
|
+
const core_1 = require("@qpqjs/core");
|
|
5
|
+
/** Writes a built script to exactly `outputFilepath` on a drive; a build publishes nothing else. */
|
|
6
|
+
function* askUserScriptPublishOutput(drive, outputFilepath, script, scope) {
|
|
7
|
+
yield* (0, core_1.askFileWriteTextContents)(drive, outputFilepath, script, undefined, scope);
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=askUserScriptPublishOutput.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"askUserScriptPublishOutput.js","sourceRoot":"","sources":["../../../../src/actionProcessor/logic/askUserScriptPublishOutput.ts"],"names":[],"mappings":";;AAGA,gEAEC;AALD,sCAAoE;AAEpE,oGAAoG;AACpG,QAAe,CAAC,CAAC,0BAA0B,CAAC,KAAa,EAAE,cAAsB,EAAE,MAAc,EAAE,KAAc;IAC/G,KAAK,CAAC,CAAC,IAAA,+BAAwB,EAAC,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;AACnF,CAAC","sourcesContent":["import { askFileWriteTextContents, AskResponse } from '@qpqjs/core';\n\n/** Writes a built script to exactly `outputFilepath` on a drive; a build publishes nothing else. */\nexport function* askUserScriptPublishOutput(drive: string, outputFilepath: string, script: string, scope?: string): AskResponse<void> {\n yield* askFileWriteTextContents(drive, outputFilepath, script, undefined, scope);\n}\n"]}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { UserScriptModuleMap } from '@qpqjs/actionprocessor-node';
|
|
2
|
+
import { BuiltUserScript } from './BuiltUserScript';
|
|
3
|
+
/**
|
|
4
|
+
* The part of a platform build that is the same whatever the source is: a temp project
|
|
5
|
+
* directory that `materialise` fills, the build, the output read back, and the temp
|
|
6
|
+
* directory removed whatever happened. Errors from `materialise` and from the build
|
|
7
|
+
* propagate for the caller to map.
|
|
8
|
+
*/
|
|
9
|
+
export declare const buildUserScriptInTempDir: (materialise: (projectDir: string) => Promise<void> | void, sourceMap: boolean, hostModules: UserScriptModuleMap) => Promise<BuiltUserScript>;
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.buildUserScriptInTempDir = void 0;
|
|
16
|
+
const fs_1 = __importDefault(require("fs"));
|
|
17
|
+
const os_1 = __importDefault(require("os"));
|
|
18
|
+
const path_1 = __importDefault(require("path"));
|
|
19
|
+
const buildUserScript_1 = require("../../build/buildUserScript");
|
|
20
|
+
/**
|
|
21
|
+
* The part of a platform build that is the same whatever the source is: a temp project
|
|
22
|
+
* directory that `materialise` fills, the build, the output read back, and the temp
|
|
23
|
+
* directory removed whatever happened. Errors from `materialise` and from the build
|
|
24
|
+
* propagate for the caller to map.
|
|
25
|
+
*/
|
|
26
|
+
const buildUserScriptInTempDir = (materialise, sourceMap, hostModules) => __awaiter(void 0, void 0, void 0, function* () {
|
|
27
|
+
const tempDir = fs_1.default.mkdtempSync(path_1.default.join(os_1.default.tmpdir(), 'qpq-user-script-'));
|
|
28
|
+
const projectDir = path_1.default.join(tempDir, 'project');
|
|
29
|
+
const outDir = path_1.default.join(tempDir, 'out');
|
|
30
|
+
try {
|
|
31
|
+
fs_1.default.mkdirSync(projectDir, { recursive: true });
|
|
32
|
+
yield materialise(projectDir);
|
|
33
|
+
const result = yield (0, buildUserScript_1.buildUserScript)({ projectDir, outDir, sourceMap, hostModules });
|
|
34
|
+
return { script: fs_1.default.readFileSync(result.entryPath, 'utf8') };
|
|
35
|
+
}
|
|
36
|
+
finally {
|
|
37
|
+
fs_1.default.rmSync(tempDir, { recursive: true, force: true });
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
exports.buildUserScriptInTempDir = buildUserScriptInTempDir;
|
|
41
|
+
//# sourceMappingURL=buildUserScriptInTempDir.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buildUserScriptInTempDir.js","sourceRoot":"","sources":["../../../../src/actionProcessor/logic/buildUserScriptInTempDir.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAEA,4CAAoB;AACpB,4CAAoB;AACpB,gDAAwB;AAExB,iEAA8D;AAG9D;;;;;GAKG;AACI,MAAM,wBAAwB,GAAG,CACtC,WAAyD,EACzD,SAAkB,EAClB,WAAgC,EACN,EAAE;IAC5B,MAAM,OAAO,GAAG,YAAE,CAAC,WAAW,CAAC,cAAI,CAAC,IAAI,CAAC,YAAE,CAAC,MAAM,EAAE,EAAE,kBAAkB,CAAC,CAAC,CAAC;IAC3E,MAAM,UAAU,GAAG,cAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IACjD,MAAM,MAAM,GAAG,cAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAEzC,IAAI,CAAC;QACH,YAAE,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9C,MAAM,WAAW,CAAC,UAAU,CAAC,CAAC;QAC9B,MAAM,MAAM,GAAG,MAAM,IAAA,iCAAe,EAAC,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC,CAAC;QAErF,OAAO,EAAE,MAAM,EAAE,YAAE,CAAC,YAAY,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,EAAE,CAAC;IAC/D,CAAC;YAAS,CAAC;QACT,YAAE,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACvD,CAAC;AACH,CAAC,CAAA,CAAC;AAlBW,QAAA,wBAAwB,4BAkBnC","sourcesContent":["import { UserScriptModuleMap } from '@qpqjs/actionprocessor-node';\n\nimport fs from 'fs';\nimport os from 'os';\nimport path from 'path';\n\nimport { buildUserScript } from '../../build/buildUserScript';\nimport { BuiltUserScript } from './BuiltUserScript';\n\n/**\n * The part of a platform build that is the same whatever the source is: a temp project\n * directory that `materialise` fills, the build, the output read back, and the temp\n * directory removed whatever happened. Errors from `materialise` and from the build\n * propagate for the caller to map.\n */\nexport const buildUserScriptInTempDir = async (\n materialise: (projectDir: string) => Promise<void> | void,\n sourceMap: boolean,\n hostModules: UserScriptModuleMap,\n): Promise<BuiltUserScript> => {\n const tempDir = fs.mkdtempSync(path.join(os.tmpdir(), 'qpq-user-script-'));\n const projectDir = path.join(tempDir, 'project');\n const outDir = path.join(tempDir, 'out');\n\n try {\n fs.mkdirSync(projectDir, { recursive: true });\n await materialise(projectDir);\n const result = await buildUserScript({ projectDir, outDir, sourceMap, hostModules });\n\n return { script: fs.readFileSync(result.entryPath, 'utf8') };\n } finally {\n fs.rmSync(tempDir, { recursive: true, force: true });\n }\n};\n"]}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unpacks a user-controlled zip into the project directory under the same rules as a
|
|
3
|
+
* directory build: plain relative paths only, no symlinks, no node_modules, at most
|
|
4
|
+
* USER_SCRIPT_SOURCE_LIMITS files and unpacked bytes counted as they are written (the
|
|
5
|
+
* sizes in the zip's headers are never trusted). Directory entries are ignored; folders
|
|
6
|
+
* come from file paths. Returns the project-relative paths written.
|
|
7
|
+
*/
|
|
8
|
+
export declare const extractUserScriptZip: (zip: Buffer, projectDir: string) => Promise<string[]>;
|