@signstack/cli 0.1.1
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 +458 -0
- package/bin/run.js +12 -0
- package/dist/apps/signstack-cli/schemas/asset.schema.json +220 -0
- package/dist/apps/signstack-cli/schemas/blueprint.schema.json +485 -0
- package/dist/apps/signstack-cli/schemas/jsonata-function.schema.json +185 -0
- package/dist/apps/signstack-cli/schemas/schema.schema.json +97 -0
- package/dist/apps/signstack-cli/schemas/template.schema.json +295 -0
- package/dist/apps/signstack-cli/src/commands/auth/login.d.ts +25 -0
- package/dist/apps/signstack-cli/src/commands/auth/login.js +229 -0
- package/dist/apps/signstack-cli/src/commands/auth/login.js.map +1 -0
- package/dist/apps/signstack-cli/src/commands/auth/logout.d.ts +10 -0
- package/dist/apps/signstack-cli/src/commands/auth/logout.js +59 -0
- package/dist/apps/signstack-cli/src/commands/auth/logout.js.map +1 -0
- package/dist/apps/signstack-cli/src/commands/auth/whoami.d.ts +9 -0
- package/dist/apps/signstack-cli/src/commands/auth/whoami.js +85 -0
- package/dist/apps/signstack-cli/src/commands/auth/whoami.js.map +1 -0
- package/dist/apps/signstack-cli/src/commands/generate.d.ts +51 -0
- package/dist/apps/signstack-cli/src/commands/generate.js +479 -0
- package/dist/apps/signstack-cli/src/commands/generate.js.map +1 -0
- package/dist/apps/signstack-cli/src/commands/preview.d.ts +24 -0
- package/dist/apps/signstack-cli/src/commands/preview.js +162 -0
- package/dist/apps/signstack-cli/src/commands/preview.js.map +1 -0
- package/dist/apps/signstack-cli/src/commands/pull.d.ts +28 -0
- package/dist/apps/signstack-cli/src/commands/pull.js +244 -0
- package/dist/apps/signstack-cli/src/commands/pull.js.map +1 -0
- package/dist/apps/signstack-cli/src/commands/push.d.ts +46 -0
- package/dist/apps/signstack-cli/src/commands/push.js +460 -0
- package/dist/apps/signstack-cli/src/commands/push.js.map +1 -0
- package/dist/apps/signstack-cli/src/commands/run.d.ts +22 -0
- package/dist/apps/signstack-cli/src/commands/run.js +126 -0
- package/dist/apps/signstack-cli/src/commands/run.js.map +1 -0
- package/dist/apps/signstack-cli/src/commands/test.d.ts +6 -0
- package/dist/apps/signstack-cli/src/commands/test.js +25 -0
- package/dist/apps/signstack-cli/src/commands/test.js.map +1 -0
- package/dist/apps/signstack-cli/src/commands/validate.d.ts +59 -0
- package/dist/apps/signstack-cli/src/commands/validate.js +558 -0
- package/dist/apps/signstack-cli/src/commands/validate.js.map +1 -0
- package/dist/apps/signstack-cli/src/index.d.ts +1 -0
- package/dist/apps/signstack-cli/src/index.js +2 -0
- package/dist/apps/signstack-cli/src/index.js.map +1 -0
- package/dist/apps/signstack-cli/src/lib/api-client.d.ts +77 -0
- package/dist/apps/signstack-cli/src/lib/api-client.js +269 -0
- package/dist/apps/signstack-cli/src/lib/api-client.js.map +1 -0
- package/dist/apps/signstack-cli/src/lib/base-command.d.ts +38 -0
- package/dist/apps/signstack-cli/src/lib/base-command.js +135 -0
- package/dist/apps/signstack-cli/src/lib/base-command.js.map +1 -0
- package/dist/apps/signstack-cli/src/lib/config.d.ts +47 -0
- package/dist/apps/signstack-cli/src/lib/config.js +106 -0
- package/dist/apps/signstack-cli/src/lib/config.js.map +1 -0
- package/dist/apps/signstack-cli/src/lib/entity-data-resolver.d.ts +31 -0
- package/dist/apps/signstack-cli/src/lib/entity-data-resolver.js +107 -0
- package/dist/apps/signstack-cli/src/lib/entity-data-resolver.js.map +1 -0
- package/dist/apps/signstack-cli/src/lib/local-resource-loader.d.ts +72 -0
- package/dist/apps/signstack-cli/src/lib/local-resource-loader.js +238 -0
- package/dist/apps/signstack-cli/src/lib/local-resource-loader.js.map +1 -0
- package/dist/apps/signstack-cli/src/lib/path-utils.d.ts +4 -0
- package/dist/apps/signstack-cli/src/lib/path-utils.js +7 -0
- package/dist/apps/signstack-cli/src/lib/path-utils.js.map +1 -0
- package/dist/apps/signstack-cli/src/lib/payload-builder.d.ts +127 -0
- package/dist/apps/signstack-cli/src/lib/payload-builder.js +545 -0
- package/dist/apps/signstack-cli/src/lib/payload-builder.js.map +1 -0
- package/dist/apps/signstack-cli/src/lib/preview-handler.d.ts +95 -0
- package/dist/apps/signstack-cli/src/lib/preview-handler.js +611 -0
- package/dist/apps/signstack-cli/src/lib/preview-handler.js.map +1 -0
- package/dist/apps/signstack-cli/src/lib/preview-output-formatter.d.ts +63 -0
- package/dist/apps/signstack-cli/src/lib/preview-output-formatter.js +198 -0
- package/dist/apps/signstack-cli/src/lib/preview-output-formatter.js.map +1 -0
- package/dist/apps/signstack-cli/src/lib/public-api-client.d.ts +13 -0
- package/dist/apps/signstack-cli/src/lib/public-api-client.js +39 -0
- package/dist/apps/signstack-cli/src/lib/public-api-client.js.map +1 -0
- package/dist/apps/signstack-cli/src/lib/resource-puller.d.ts +131 -0
- package/dist/apps/signstack-cli/src/lib/resource-puller.js +800 -0
- package/dist/apps/signstack-cli/src/lib/resource-puller.js.map +1 -0
- package/dist/apps/signstack-cli/src/lib/resource-pusher.d.ts +87 -0
- package/dist/apps/signstack-cli/src/lib/resource-pusher.js +361 -0
- package/dist/apps/signstack-cli/src/lib/resource-pusher.js.map +1 -0
- package/dist/apps/signstack-cli/src/lib/resource-scanner.d.ts +29 -0
- package/dist/apps/signstack-cli/src/lib/resource-scanner.js +101 -0
- package/dist/apps/signstack-cli/src/lib/resource-scanner.js.map +1 -0
- package/dist/apps/signstack-cli/src/lib/resource-validator.d.ts +44 -0
- package/dist/apps/signstack-cli/src/lib/resource-validator.js +158 -0
- package/dist/apps/signstack-cli/src/lib/resource-validator.js.map +1 -0
- package/dist/apps/signstack-cli/src/lib/run-handler.d.ts +47 -0
- package/dist/apps/signstack-cli/src/lib/run-handler.js +266 -0
- package/dist/apps/signstack-cli/src/lib/run-handler.js.map +1 -0
- package/dist/apps/signstack-cli/src/lib/safe-path.d.ts +28 -0
- package/dist/apps/signstack-cli/src/lib/safe-path.js +44 -0
- package/dist/apps/signstack-cli/src/lib/safe-path.js.map +1 -0
- package/dist/apps/signstack-cli/src/lib/scenario-file.d.ts +35 -0
- package/dist/apps/signstack-cli/src/lib/scenario-file.js +80 -0
- package/dist/apps/signstack-cli/src/lib/scenario-file.js.map +1 -0
- package/dist/apps/signstack-cli/src/lib/schema-validator.d.ts +8 -0
- package/dist/apps/signstack-cli/src/lib/schema-validator.js +39 -0
- package/dist/apps/signstack-cli/src/lib/schema-validator.js.map +1 -0
- package/dist/apps/signstack-cli/src/lib/url-validator.d.ts +17 -0
- package/dist/apps/signstack-cli/src/lib/url-validator.js +61 -0
- package/dist/apps/signstack-cli/src/lib/url-validator.js.map +1 -0
- package/dist/apps/signstack-cli/src/lib/yaml-document-parser.d.ts +25 -0
- package/dist/apps/signstack-cli/src/lib/yaml-document-parser.js +133 -0
- package/dist/apps/signstack-cli/src/lib/yaml-document-parser.js.map +1 -0
- package/dist/apps/signstack-cli/src/lib/yaml-transforms.d.ts +3 -0
- package/dist/apps/signstack-cli/src/lib/yaml-transforms.js +32 -0
- package/dist/apps/signstack-cli/src/lib/yaml-transforms.js.map +1 -0
- package/dist/apps/signstack-cli/src/lib/yaml-writer.d.ts +47 -0
- package/dist/apps/signstack-cli/src/lib/yaml-writer.js +160 -0
- package/dist/apps/signstack-cli/src/lib/yaml-writer.js.map +1 -0
- package/dist/apps/signstack-cli/src/types/auth.types.d.ts +48 -0
- package/dist/apps/signstack-cli/src/types/auth.types.js +31 -0
- package/dist/apps/signstack-cli/src/types/auth.types.js.map +1 -0
- package/dist/apps/signstack-cli/src/types/schema.types.d.ts +14 -0
- package/dist/apps/signstack-cli/src/types/schema.types.js +16 -0
- package/dist/apps/signstack-cli/src/types/schema.types.js.map +1 -0
- package/dist/apps/signstack-cli/src/types/yaml.types.d.ts +144 -0
- package/dist/apps/signstack-cli/src/types/yaml.types.js +2 -0
- package/dist/apps/signstack-cli/src/types/yaml.types.js.map +1 -0
- package/dist/libs/common/base/src/index.d.ts +14 -0
- package/dist/libs/common/base/src/index.js +44 -0
- package/dist/libs/common/base/src/index.js.map +1 -0
- package/dist/libs/common/base/src/lib/address.util.d.ts +12 -0
- package/dist/libs/common/base/src/lib/address.util.js +55 -0
- package/dist/libs/common/base/src/lib/address.util.js.map +1 -0
- package/dist/libs/common/base/src/lib/country-code-data.d.ts +5 -0
- package/dist/libs/common/base/src/lib/country-code-data.js +1256 -0
- package/dist/libs/common/base/src/lib/country-code-data.js.map +1 -0
- package/dist/libs/common/base/src/lib/date.util.d.ts +13 -0
- package/dist/libs/common/base/src/lib/date.util.js +135 -0
- package/dist/libs/common/base/src/lib/date.util.js.map +1 -0
- package/dist/libs/common/base/src/lib/headers.d.ts +1 -0
- package/dist/libs/common/base/src/lib/headers.js +5 -0
- package/dist/libs/common/base/src/lib/headers.js.map +1 -0
- package/dist/libs/common/base/src/lib/jsonata.service.d.ts +32 -0
- package/dist/libs/common/base/src/lib/jsonata.service.js +207 -0
- package/dist/libs/common/base/src/lib/jsonata.service.js.map +1 -0
- package/dist/libs/common/base/src/lib/key-validation.constants.d.ts +37 -0
- package/dist/libs/common/base/src/lib/key-validation.constants.js +144 -0
- package/dist/libs/common/base/src/lib/key-validation.constants.js.map +1 -0
- package/dist/libs/common/base/src/lib/phone-util.d.ts +16 -0
- package/dist/libs/common/base/src/lib/phone-util.js +61 -0
- package/dist/libs/common/base/src/lib/phone-util.js.map +1 -0
- package/dist/libs/common/base/src/lib/schema-validation.util.d.ts +24 -0
- package/dist/libs/common/base/src/lib/schema-validation.util.js +155 -0
- package/dist/libs/common/base/src/lib/schema-validation.util.js.map +1 -0
- package/dist/libs/common/base/src/lib/string-builder.d.ts +48 -0
- package/dist/libs/common/base/src/lib/string-builder.js +90 -0
- package/dist/libs/common/base/src/lib/string-builder.js.map +1 -0
- package/dist/libs/common/base/src/lib/util.d.ts +20 -0
- package/dist/libs/common/base/src/lib/util.js +110 -0
- package/dist/libs/common/base/src/lib/util.js.map +1 -0
- package/dist/libs/signstack/base/schemas/asset.schema.json +220 -0
- package/dist/libs/signstack/base/schemas/blueprint.schema.json +485 -0
- package/dist/libs/signstack/base/schemas/jsonata-function.schema.json +185 -0
- package/dist/libs/signstack/base/schemas/schema.schema.json +97 -0
- package/dist/libs/signstack/base/schemas/template.schema.json +295 -0
- package/dist/libs/signstack/base/src/index.d.ts +28 -0
- package/dist/libs/signstack/base/src/index.js +32 -0
- package/dist/libs/signstack/base/src/index.js.map +1 -0
- package/dist/libs/signstack/base/src/lib/constants.d.ts +123 -0
- package/dist/libs/signstack/base/src/lib/constants.js +131 -0
- package/dist/libs/signstack/base/src/lib/constants.js.map +1 -0
- package/dist/libs/signstack/base/src/lib/hash.util.d.ts +58 -0
- package/dist/libs/signstack/base/src/lib/hash.util.js +90 -0
- package/dist/libs/signstack/base/src/lib/hash.util.js.map +1 -0
- package/dist/libs/signstack/base/src/lib/is-schema-renderable.util.d.ts +29 -0
- package/dist/libs/signstack/base/src/lib/is-schema-renderable.util.js +93 -0
- package/dist/libs/signstack/base/src/lib/is-schema-renderable.util.js.map +1 -0
- package/dist/libs/signstack/base/src/lib/models/ai-chat.d.ts +41 -0
- package/dist/libs/signstack/base/src/lib/models/ai-chat.js +3 -0
- package/dist/libs/signstack/base/src/lib/models/ai-chat.js.map +1 -0
- package/dist/libs/signstack/base/src/lib/models/api-key.d.ts +54 -0
- package/dist/libs/signstack/base/src/lib/models/api-key.js +18 -0
- package/dist/libs/signstack/base/src/lib/models/api-key.js.map +1 -0
- package/dist/libs/signstack/base/src/lib/models/asset.d.ts +101 -0
- package/dist/libs/signstack/base/src/lib/models/asset.js +11 -0
- package/dist/libs/signstack/base/src/lib/models/asset.js.map +1 -0
- package/dist/libs/signstack/base/src/lib/models/auth.d.ts +142 -0
- package/dist/libs/signstack/base/src/lib/models/auth.js +35 -0
- package/dist/libs/signstack/base/src/lib/models/auth.js.map +1 -0
- package/dist/libs/signstack/base/src/lib/models/base.d.ts +134 -0
- package/dist/libs/signstack/base/src/lib/models/base.js +71 -0
- package/dist/libs/signstack/base/src/lib/models/base.js.map +1 -0
- package/dist/libs/signstack/base/src/lib/models/blueprint.d.ts +311 -0
- package/dist/libs/signstack/base/src/lib/models/blueprint.js +9 -0
- package/dist/libs/signstack/base/src/lib/models/blueprint.js.map +1 -0
- package/dist/libs/signstack/base/src/lib/models/file.d.ts +75 -0
- package/dist/libs/signstack/base/src/lib/models/file.js +9 -0
- package/dist/libs/signstack/base/src/lib/models/file.js.map +1 -0
- package/dist/libs/signstack/base/src/lib/models/jsonata-function.d.ts +111 -0
- package/dist/libs/signstack/base/src/lib/models/jsonata-function.js +19 -0
- package/dist/libs/signstack/base/src/lib/models/jsonata-function.js.map +1 -0
- package/dist/libs/signstack/base/src/lib/models/marketplace-listing.d.ts +132 -0
- package/dist/libs/signstack/base/src/lib/models/marketplace-listing.js +22 -0
- package/dist/libs/signstack/base/src/lib/models/marketplace-listing.js.map +1 -0
- package/dist/libs/signstack/base/src/lib/models/membership.d.ts +127 -0
- package/dist/libs/signstack/base/src/lib/models/membership.js +22 -0
- package/dist/libs/signstack/base/src/lib/models/membership.js.map +1 -0
- package/dist/libs/signstack/base/src/lib/models/namespace.d.ts +87 -0
- package/dist/libs/signstack/base/src/lib/models/namespace.js +57 -0
- package/dist/libs/signstack/base/src/lib/models/namespace.js.map +1 -0
- package/dist/libs/signstack/base/src/lib/models/organization.d.ts +79 -0
- package/dist/libs/signstack/base/src/lib/models/organization.js +41 -0
- package/dist/libs/signstack/base/src/lib/models/organization.js.map +1 -0
- package/dist/libs/signstack/base/src/lib/models/render-job.d.ts +88 -0
- package/dist/libs/signstack/base/src/lib/models/render-job.js +3 -0
- package/dist/libs/signstack/base/src/lib/models/render-job.js.map +1 -0
- package/dist/libs/signstack/base/src/lib/models/resource-edge.d.ts +60 -0
- package/dist/libs/signstack/base/src/lib/models/resource-edge.js +202 -0
- package/dist/libs/signstack/base/src/lib/models/resource-edge.js.map +1 -0
- package/dist/libs/signstack/base/src/lib/models/scenario.d.ts +138 -0
- package/dist/libs/signstack/base/src/lib/models/scenario.js +14 -0
- package/dist/libs/signstack/base/src/lib/models/scenario.js.map +1 -0
- package/dist/libs/signstack/base/src/lib/models/schema.d.ts +131 -0
- package/dist/libs/signstack/base/src/lib/models/schema.js +44 -0
- package/dist/libs/signstack/base/src/lib/models/schema.js.map +1 -0
- package/dist/libs/signstack/base/src/lib/models/shareable-link.d.ts +215 -0
- package/dist/libs/signstack/base/src/lib/models/shareable-link.js +27 -0
- package/dist/libs/signstack/base/src/lib/models/shareable-link.js.map +1 -0
- package/dist/libs/signstack/base/src/lib/models/subscription.d.ts +279 -0
- package/dist/libs/signstack/base/src/lib/models/subscription.js +105 -0
- package/dist/libs/signstack/base/src/lib/models/subscription.js.map +1 -0
- package/dist/libs/signstack/base/src/lib/models/template.d.ts +248 -0
- package/dist/libs/signstack/base/src/lib/models/template.js +32 -0
- package/dist/libs/signstack/base/src/lib/models/template.js.map +1 -0
- package/dist/libs/signstack/base/src/lib/models/user.d.ts +30 -0
- package/dist/libs/signstack/base/src/lib/models/user.js +3 -0
- package/dist/libs/signstack/base/src/lib/models/user.js.map +1 -0
- package/dist/libs/signstack/base/src/lib/models/webhook.d.ts +223 -0
- package/dist/libs/signstack/base/src/lib/models/webhook.js +62 -0
- package/dist/libs/signstack/base/src/lib/models/webhook.js.map +1 -0
- package/dist/libs/signstack/base/src/lib/models/workflow.d.ts +917 -0
- package/dist/libs/signstack/base/src/lib/models/workflow.js +152 -0
- package/dist/libs/signstack/base/src/lib/models/workflow.js.map +1 -0
- package/dist/libs/signstack/base/src/lib/util.d.ts +92 -0
- package/dist/libs/signstack/base/src/lib/util.js +406 -0
- package/dist/libs/signstack/base/src/lib/util.js.map +1 -0
- package/dist/libs/signstack/base/src/lib/validation/dependency-graph.d.ts +94 -0
- package/dist/libs/signstack/base/src/lib/validation/dependency-graph.js +446 -0
- package/dist/libs/signstack/base/src/lib/validation/dependency-graph.js.map +1 -0
- package/dist/libs/signstack/base/src/lib/validation/graph.types.d.ts +57 -0
- package/dist/libs/signstack/base/src/lib/validation/graph.types.js +8 -0
- package/dist/libs/signstack/base/src/lib/validation/graph.types.js.map +1 -0
- package/dist/libs/signstack/base/src/lib/validation/index.d.ts +9 -0
- package/dist/libs/signstack/base/src/lib/validation/index.js +23 -0
- package/dist/libs/signstack/base/src/lib/validation/index.js.map +1 -0
- package/dist/libs/signstack/base/src/lib/validation/resource-schemas.d.ts +3 -0
- package/dist/libs/signstack/base/src/lib/validation/resource-schemas.js +27 -0
- package/dist/libs/signstack/base/src/lib/validation/resource-schemas.js.map +1 -0
- package/dist/libs/signstack/base/src/lib/validation/schema-validation.types.d.ts +57 -0
- package/dist/libs/signstack/base/src/lib/validation/schema-validation.types.js +57 -0
- package/dist/libs/signstack/base/src/lib/validation/schema-validation.types.js.map +1 -0
- package/dist/libs/signstack/base/src/lib/validation/schema-validator.d.ts +38 -0
- package/dist/libs/signstack/base/src/lib/validation/schema-validator.js +146 -0
- package/dist/libs/signstack/base/src/lib/validation/schema-validator.js.map +1 -0
- package/dist/libs/signstack/base/src/lib/validation/validate-dependencies.d.ts +22 -0
- package/dist/libs/signstack/base/src/lib/validation/validate-dependencies.js +69 -0
- package/dist/libs/signstack/base/src/lib/validation/validate-dependencies.js.map +1 -0
- package/dist/libs/signstack/base/src/lib/validation/validate-resource-tree.d.ts +37 -0
- package/dist/libs/signstack/base/src/lib/validation/validate-resource-tree.js +250 -0
- package/dist/libs/signstack/base/src/lib/validation/validate-resource-tree.js.map +1 -0
- package/dist/libs/signstack/base/src/lib/validation/validate-template-inputs.d.ts +24 -0
- package/dist/libs/signstack/base/src/lib/validation/validate-template-inputs.js +98 -0
- package/dist/libs/signstack/base/src/lib/validation/validate-template-inputs.js.map +1 -0
- package/dist/libs/signstack/base/src/lib/validation/yaml-document-utils.d.ts +12 -0
- package/dist/libs/signstack/base/src/lib/validation/yaml-document-utils.js +50 -0
- package/dist/libs/signstack/base/src/lib/validation/yaml-document-utils.js.map +1 -0
- package/dist/libs/signstack/base/src/lib/yaml-spec-converter.d.ts +101 -0
- package/dist/libs/signstack/base/src/lib/yaml-spec-converter.js +998 -0
- package/dist/libs/signstack/base/src/lib/yaml-spec-converter.js.map +1 -0
- package/oclif.manifest.json +822 -0
- package/package.json +101 -0
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import { existsSync, mkdirSync, readFileSync, unlinkSync, writeFileSync } from 'node:fs';
|
|
2
|
+
import { homedir } from 'node:os';
|
|
3
|
+
import { join } from 'node:path';
|
|
4
|
+
import { CONFIG_DIR_NAME, CONFIG_FILE_NAME, DEFAULT_API_URL, } from '../types/auth.types.js';
|
|
5
|
+
/**
|
|
6
|
+
* Get the configuration directory path
|
|
7
|
+
* Uses ~/.config/signstack on Unix-like systems
|
|
8
|
+
* Uses ~/.signstack on Windows
|
|
9
|
+
*/
|
|
10
|
+
export function getConfigDir() {
|
|
11
|
+
const home = homedir();
|
|
12
|
+
if (process.platform === 'win32') {
|
|
13
|
+
return join(home, `.${CONFIG_DIR_NAME}`);
|
|
14
|
+
}
|
|
15
|
+
// Use XDG Base Directory on Unix-like systems
|
|
16
|
+
const xdgConfig = process.env['XDG_CONFIG_HOME'] || join(home, '.config');
|
|
17
|
+
return join(xdgConfig, CONFIG_DIR_NAME);
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Get the full path to the config file
|
|
21
|
+
*/
|
|
22
|
+
export function getConfigPath() {
|
|
23
|
+
return join(getConfigDir(), CONFIG_FILE_NAME);
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Ensure the config directory exists with proper permissions
|
|
27
|
+
*/
|
|
28
|
+
export function ensureConfigDir() {
|
|
29
|
+
const configDir = getConfigDir();
|
|
30
|
+
if (!existsSync(configDir)) {
|
|
31
|
+
mkdirSync(configDir, { recursive: true, mode: 0o700 });
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Read the current configuration
|
|
36
|
+
* @returns The configuration object or null if not found
|
|
37
|
+
*/
|
|
38
|
+
export function readConfig() {
|
|
39
|
+
const configPath = getConfigPath();
|
|
40
|
+
if (!existsSync(configPath)) {
|
|
41
|
+
return null;
|
|
42
|
+
}
|
|
43
|
+
try {
|
|
44
|
+
const content = readFileSync(configPath, 'utf-8');
|
|
45
|
+
return JSON.parse(content);
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
return null;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Write configuration to file with secure permissions
|
|
53
|
+
* @param config The configuration to save
|
|
54
|
+
*/
|
|
55
|
+
export function writeConfig(config) {
|
|
56
|
+
ensureConfigDir();
|
|
57
|
+
const configPath = getConfigPath();
|
|
58
|
+
writeFileSync(configPath, JSON.stringify(config, null, 2), {
|
|
59
|
+
encoding: 'utf-8',
|
|
60
|
+
mode: 0o600, // Owner read/write only
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Update specific fields in the configuration
|
|
65
|
+
* @param updates Partial configuration to merge
|
|
66
|
+
*/
|
|
67
|
+
export function updateConfig(updates) {
|
|
68
|
+
const existing = readConfig();
|
|
69
|
+
if (!existing) {
|
|
70
|
+
throw new Error('No existing configuration found. Please login first.');
|
|
71
|
+
}
|
|
72
|
+
writeConfig({ ...existing, ...updates });
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Delete the configuration file (logout)
|
|
76
|
+
*/
|
|
77
|
+
export function deleteConfig() {
|
|
78
|
+
const configPath = getConfigPath();
|
|
79
|
+
if (existsSync(configPath)) {
|
|
80
|
+
unlinkSync(configPath);
|
|
81
|
+
return true;
|
|
82
|
+
}
|
|
83
|
+
return false;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Check if the user is logged in (config exists)
|
|
87
|
+
*/
|
|
88
|
+
export function isLoggedIn() {
|
|
89
|
+
return readConfig() !== null;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Get the API URL from config or use default
|
|
93
|
+
*/
|
|
94
|
+
export function getApiUrl() {
|
|
95
|
+
const config = readConfig();
|
|
96
|
+
return config?.apiUrl || DEFAULT_API_URL;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Check if the stored access token is expired
|
|
100
|
+
* Considers token expired 5 minutes before actual expiry for safety
|
|
101
|
+
*/
|
|
102
|
+
export function isTokenExpired(config) {
|
|
103
|
+
const safetyMargin = 5 * 60 * 1000; // 5 minutes in milliseconds
|
|
104
|
+
return Date.now() >= config.tokenExpiry - safetyMargin;
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../../../src/lib/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { GenerateSchemaExamplesResp, ScenarioEntity } from '@signstack/base';
|
|
2
|
+
export interface EntityDataResult {
|
|
3
|
+
entities: ScenarioEntity[];
|
|
4
|
+
isAutoGenerated: boolean;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Resolve entity data for preview — shared between local and SignStack handlers.
|
|
8
|
+
*
|
|
9
|
+
* Resolve entity data for preview — shared between local and SignStack handlers.
|
|
10
|
+
* If a scenarioKey is provided, fetches scenario data and maps entities to input slots.
|
|
11
|
+
* Otherwise, generates sample data using either local schema parsing or the API.
|
|
12
|
+
*/
|
|
13
|
+
export declare function resolveEntityData(params: {
|
|
14
|
+
entitySlots: Array<{
|
|
15
|
+
key: string;
|
|
16
|
+
schemaKey: string;
|
|
17
|
+
schemaVersion: string;
|
|
18
|
+
}>;
|
|
19
|
+
scenarioKey: string | undefined;
|
|
20
|
+
jsonOutput: boolean;
|
|
21
|
+
generateLocal?: (slots: Array<{
|
|
22
|
+
key: string;
|
|
23
|
+
schemaKey: string;
|
|
24
|
+
schemaVersion: string;
|
|
25
|
+
}>) => ScenarioEntity[];
|
|
26
|
+
fetchScenario?: (scenarioKey: string) => Promise<{
|
|
27
|
+
entities: ScenarioEntity[];
|
|
28
|
+
}>;
|
|
29
|
+
generateFromApi?: (schemaKeys: string[]) => Promise<GenerateSchemaExamplesResp[]>;
|
|
30
|
+
log: (message: string) => void;
|
|
31
|
+
}): Promise<EntityDataResult>;
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import ora from 'ora';
|
|
2
|
+
/**
|
|
3
|
+
* Resolve entity data for preview — shared between local and SignStack handlers.
|
|
4
|
+
*
|
|
5
|
+
* Resolve entity data for preview — shared between local and SignStack handlers.
|
|
6
|
+
* If a scenarioKey is provided, fetches scenario data and maps entities to input slots.
|
|
7
|
+
* Otherwise, generates sample data using either local schema parsing or the API.
|
|
8
|
+
*/
|
|
9
|
+
export async function resolveEntityData(params) {
|
|
10
|
+
const { entitySlots, scenarioKey, jsonOutput, log } = params;
|
|
11
|
+
if (scenarioKey && params.fetchScenario) {
|
|
12
|
+
if (!jsonOutput) {
|
|
13
|
+
log(`Using scenario: ${scenarioKey}`);
|
|
14
|
+
}
|
|
15
|
+
const scenario = await params.fetchScenario(scenarioKey);
|
|
16
|
+
// Map scenario entities to input slots by key
|
|
17
|
+
const entityByKey = new Map((scenario.entities || []).map((e) => [e.key, e]));
|
|
18
|
+
const entities = entitySlots
|
|
19
|
+
.map((slot) => {
|
|
20
|
+
const entity = entityByKey.get(slot.key);
|
|
21
|
+
if (!entity)
|
|
22
|
+
return null;
|
|
23
|
+
return { key: slot.key, data: entity.data };
|
|
24
|
+
})
|
|
25
|
+
.filter((e) => e !== null);
|
|
26
|
+
return { entities, isAutoGenerated: false };
|
|
27
|
+
}
|
|
28
|
+
if (!entitySlots || entitySlots.length === 0) {
|
|
29
|
+
return { entities: [], isAutoGenerated: false };
|
|
30
|
+
}
|
|
31
|
+
// Local generation (from schema JSON definitions on disk)
|
|
32
|
+
if (params.generateLocal) {
|
|
33
|
+
const entities = params.generateLocal(entitySlots);
|
|
34
|
+
// Chain: for any slots where local generated empty data, fall back to API
|
|
35
|
+
const unfilledSlots = entitySlots.filter((slot) => !entities.find((e) => e.key === slot.key && Object.keys(e.data).length > 0));
|
|
36
|
+
if (unfilledSlots.length > 0 && params.generateFromApi) {
|
|
37
|
+
const unfilledSchemaKeys = [
|
|
38
|
+
...new Set(unfilledSlots.map((s) => s.schemaKey)),
|
|
39
|
+
];
|
|
40
|
+
const spinner = jsonOutput
|
|
41
|
+
? null
|
|
42
|
+
: ora({
|
|
43
|
+
text: `Generating sample data for ${unfilledSchemaKeys.length} missing schema(s) using AI...`,
|
|
44
|
+
color: 'cyan',
|
|
45
|
+
}).start();
|
|
46
|
+
try {
|
|
47
|
+
const apiExamples = await params.generateFromApi(unfilledSchemaKeys);
|
|
48
|
+
spinner?.succeed(`Generated sample data for ${unfilledSchemaKeys.length} schema(s) via AI`);
|
|
49
|
+
const apiBySchema = new Map(apiExamples.map((ex) => [ex.schemaKey, ex.exampleData]));
|
|
50
|
+
for (const slot of unfilledSlots) {
|
|
51
|
+
const apiData = apiBySchema.get(slot.schemaKey);
|
|
52
|
+
if (apiData) {
|
|
53
|
+
const idx = entities.findIndex((e) => e.key === slot.key);
|
|
54
|
+
if (idx >= 0) {
|
|
55
|
+
entities[idx] = {
|
|
56
|
+
key: slot.key,
|
|
57
|
+
data: apiData,
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
entities.push({
|
|
62
|
+
key: slot.key,
|
|
63
|
+
data: apiData,
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
catch {
|
|
70
|
+
spinner?.warn('Could not generate AI sample data for missing schemas, continuing with local data');
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
if (!jsonOutput && entities?.length) {
|
|
74
|
+
log(`Generated sample data for ${entities.length} entity slot(s)`);
|
|
75
|
+
}
|
|
76
|
+
return { entities, isAutoGenerated: true };
|
|
77
|
+
}
|
|
78
|
+
// API generation (AI-generated examples)
|
|
79
|
+
if (params.generateFromApi) {
|
|
80
|
+
const schemaKeys = [
|
|
81
|
+
...new Set(entitySlots.map((slot) => slot.schemaKey)),
|
|
82
|
+
];
|
|
83
|
+
const spinner = jsonOutput
|
|
84
|
+
? null
|
|
85
|
+
: ora({
|
|
86
|
+
text: 'Generating sample data from schemas using AI...',
|
|
87
|
+
color: 'cyan',
|
|
88
|
+
}).start();
|
|
89
|
+
let examplesResp;
|
|
90
|
+
try {
|
|
91
|
+
examplesResp = await params.generateFromApi(schemaKeys);
|
|
92
|
+
spinner?.succeed(`Generated sample data for ${schemaKeys.length} schema(s)`);
|
|
93
|
+
}
|
|
94
|
+
catch (error) {
|
|
95
|
+
spinner?.fail('Failed to generate sample data');
|
|
96
|
+
throw error;
|
|
97
|
+
}
|
|
98
|
+
const examplesBySchema = new Map(examplesResp.map((ex) => [ex.schemaKey, ex.exampleData]));
|
|
99
|
+
const entities = entitySlots.map((slot) => ({
|
|
100
|
+
key: slot.key,
|
|
101
|
+
data: examplesBySchema.get(slot.schemaKey) || {},
|
|
102
|
+
}));
|
|
103
|
+
return { entities, isAutoGenerated: true };
|
|
104
|
+
}
|
|
105
|
+
return { entities: [], isAutoGenerated: false };
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=entity-data-resolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entity-data-resolver.js","sourceRoot":"","sources":["../../../../../src/lib/entity-data-resolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { DependencyGraph, type ParsedDocument, type ResourceId } from '@signstack/base';
|
|
2
|
+
import { ApiClient } from './api-client.js';
|
|
3
|
+
import { PayloadBuilder, type AssetFilePayload } from './payload-builder.js';
|
|
4
|
+
import { type ExtendedValidationSummary as ValidationSummary } from './resource-validator.js';
|
|
5
|
+
import { SchemaKind } from '../types/schema.types.js';
|
|
6
|
+
export interface PrepareLocalResult {
|
|
7
|
+
graph: DependencyGraph;
|
|
8
|
+
missingDeps: Map<ResourceId, Set<ResourceId>>;
|
|
9
|
+
targetDoc: ParsedDocument;
|
|
10
|
+
targetId: ResourceId;
|
|
11
|
+
relevantDocs: ParsedDocument[];
|
|
12
|
+
fileIdMap: Map<string, string>;
|
|
13
|
+
assetDocs: ParsedDocument[];
|
|
14
|
+
}
|
|
15
|
+
export interface LocalResourceCallbacks {
|
|
16
|
+
printValidationErrors?: (summary: ValidationSummary, jsonOutput: boolean) => void;
|
|
17
|
+
printValidationSuccess?: (passedCount: number) => void;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Shared utility for loading and preparing local YAML resources.
|
|
21
|
+
*
|
|
22
|
+
* Handles validation, dependency collection, target lookup, and asset upload.
|
|
23
|
+
* Used by both PreviewHandler and RunHandler.
|
|
24
|
+
*/
|
|
25
|
+
export declare class LocalResourceLoader {
|
|
26
|
+
private readonly apiClient;
|
|
27
|
+
private readonly orgId;
|
|
28
|
+
private readonly payloadBuilder;
|
|
29
|
+
private readonly log;
|
|
30
|
+
private readonly error;
|
|
31
|
+
private readonly resourceValidator;
|
|
32
|
+
constructor(apiClient: ApiClient, orgId: string, payloadBuilder: PayloadBuilder, log: (message: string) => void, error: (message: string, options?: {
|
|
33
|
+
exit?: number;
|
|
34
|
+
}) => never);
|
|
35
|
+
/**
|
|
36
|
+
* Validate YAML files, find target resource, collect transitive dependencies,
|
|
37
|
+
* and upload local asset files.
|
|
38
|
+
*/
|
|
39
|
+
prepareLocalResources(opts: {
|
|
40
|
+
pathArg: string;
|
|
41
|
+
resourceRef: string;
|
|
42
|
+
resourceKind: SchemaKind;
|
|
43
|
+
resourceType: string;
|
|
44
|
+
jsonOutput: boolean;
|
|
45
|
+
inlineOnly: boolean;
|
|
46
|
+
callbacks?: LocalResourceCallbacks;
|
|
47
|
+
}): Promise<PrepareLocalResult>;
|
|
48
|
+
/**
|
|
49
|
+
* Validate YAML files in folder
|
|
50
|
+
*/
|
|
51
|
+
validateYamlFiles(resolvedPath: string, jsonOutput: boolean): Promise<{
|
|
52
|
+
graph: DependencyGraph;
|
|
53
|
+
summary: ValidationSummary;
|
|
54
|
+
}>;
|
|
55
|
+
/**
|
|
56
|
+
* Upload asset files using files/lookup + initiate-upload + GCS PUT
|
|
57
|
+
*/
|
|
58
|
+
uploadAssetFiles(assetFiles: AssetFilePayload[], jsonOutput: boolean): Promise<Map<string, string>>;
|
|
59
|
+
/**
|
|
60
|
+
* Parse a resource reference like "my_resource@1.0.0"
|
|
61
|
+
*/
|
|
62
|
+
parseResourceRef(ref: string, resourceType: string): {
|
|
63
|
+
key: string;
|
|
64
|
+
version: string;
|
|
65
|
+
};
|
|
66
|
+
/**
|
|
67
|
+
* Check which files already exist in storage by their hashes. Issues one
|
|
68
|
+
* `GET /files?hash=…` per hash in parallel; for each hit, picks the most
|
|
69
|
+
* recently uploaded file.
|
|
70
|
+
*/
|
|
71
|
+
private checkFilesExist;
|
|
72
|
+
}
|
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
import { existsSync } from 'node:fs';
|
|
2
|
+
import { resolve } from 'node:path';
|
|
3
|
+
import ora from 'ora';
|
|
4
|
+
import { DependencyGraph, } from '@signstack/base';
|
|
5
|
+
import { getResourceValidator, } from './resource-validator.js';
|
|
6
|
+
import { SchemaKind } from '../types/schema.types.js';
|
|
7
|
+
/**
|
|
8
|
+
* Shared utility for loading and preparing local YAML resources.
|
|
9
|
+
*
|
|
10
|
+
* Handles validation, dependency collection, target lookup, and asset upload.
|
|
11
|
+
* Used by both PreviewHandler and RunHandler.
|
|
12
|
+
*/
|
|
13
|
+
export class LocalResourceLoader {
|
|
14
|
+
apiClient;
|
|
15
|
+
orgId;
|
|
16
|
+
payloadBuilder;
|
|
17
|
+
log;
|
|
18
|
+
error;
|
|
19
|
+
resourceValidator;
|
|
20
|
+
constructor(apiClient, orgId, payloadBuilder, log, error) {
|
|
21
|
+
this.apiClient = apiClient;
|
|
22
|
+
this.orgId = orgId;
|
|
23
|
+
this.payloadBuilder = payloadBuilder;
|
|
24
|
+
this.log = log;
|
|
25
|
+
this.error = error;
|
|
26
|
+
this.resourceValidator = getResourceValidator();
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Validate YAML files, find target resource, collect transitive dependencies,
|
|
30
|
+
* and upload local asset files.
|
|
31
|
+
*/
|
|
32
|
+
async prepareLocalResources(opts) {
|
|
33
|
+
const resolvedPath = resolve(opts.pathArg);
|
|
34
|
+
if (!existsSync(resolvedPath)) {
|
|
35
|
+
this.error(`Path not found: ${resolvedPath}`, {
|
|
36
|
+
exit: 1,
|
|
37
|
+
suggestions: [
|
|
38
|
+
'Check that the folder path exists',
|
|
39
|
+
'Use -p to specify a different folder',
|
|
40
|
+
'Use --resolve remote to skip local files entirely',
|
|
41
|
+
],
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
// Validate YAML files
|
|
45
|
+
const { graph, summary } = await this.validateYamlFiles(resolvedPath, opts.jsonOutput);
|
|
46
|
+
if (summary.hasCycles) {
|
|
47
|
+
opts.callbacks?.printValidationErrors?.(summary, opts.jsonOutput);
|
|
48
|
+
this.error('Circular dependencies detected. Fix cycles before proceeding.', {
|
|
49
|
+
exit: 1,
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
const missingDeps = graph.getMissingDependencies();
|
|
53
|
+
// Count total missing-dep failures: each missing dep per source node = one failure
|
|
54
|
+
const totalMissingDepFailures = [...missingDeps.values()].reduce((sum, deps) => sum + deps.size, 0);
|
|
55
|
+
const nonMissingDepFailures = summary.failed - totalMissingDepFailures;
|
|
56
|
+
if (nonMissingDepFailures > 0) {
|
|
57
|
+
opts.callbacks?.printValidationErrors?.(summary, opts.jsonOutput);
|
|
58
|
+
this.error('Validation failed. Fix the errors listed above before proceeding.', {
|
|
59
|
+
exit: 1,
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
if (missingDeps.size > 0 && opts.inlineOnly) {
|
|
63
|
+
opts.callbacks?.printValidationErrors?.(summary, opts.jsonOutput);
|
|
64
|
+
this.error('Missing dependencies found. All resources must exist locally in --resolve local mode.', {
|
|
65
|
+
exit: 1,
|
|
66
|
+
suggestions: [
|
|
67
|
+
'Add the missing resources to your local YAML files',
|
|
68
|
+
'Or remove --resolve local to allow API fallback for missing deps',
|
|
69
|
+
],
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
if (!opts.jsonOutput) {
|
|
73
|
+
opts.callbacks?.printValidationSuccess?.(summary.passed);
|
|
74
|
+
}
|
|
75
|
+
// Find target resource — supports both key@version and key-only (resolves latest)
|
|
76
|
+
let targetDoc;
|
|
77
|
+
let targetId;
|
|
78
|
+
if (opts.resourceRef.includes('@')) {
|
|
79
|
+
const { key, version } = this.parseResourceRef(opts.resourceRef, opts.resourceType);
|
|
80
|
+
targetId = DependencyGraph.createId(opts.resourceKind, key, version);
|
|
81
|
+
targetDoc = graph.nodes.get(targetId);
|
|
82
|
+
if (!targetDoc) {
|
|
83
|
+
const available = Array.from(graph.nodes.values())
|
|
84
|
+
.filter((d) => d.kind === opts.resourceKind)
|
|
85
|
+
.map((d) => ` - ${d.key}@${d.version}`)
|
|
86
|
+
.join('\n');
|
|
87
|
+
const label = opts.resourceType.charAt(0).toUpperCase() + opts.resourceType.slice(1);
|
|
88
|
+
this.error(`${label} "${key}@${version}" not found.\n\nAvailable ${opts.resourceType}s:\n${available}`, { exit: 1 });
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
// Key-only: find the highest version in local files
|
|
93
|
+
targetDoc = graph.findLatestVersion(opts.resourceKind, opts.resourceRef);
|
|
94
|
+
if (!targetDoc) {
|
|
95
|
+
const available = Array.from(graph.nodes.values())
|
|
96
|
+
.filter((d) => d.kind === opts.resourceKind)
|
|
97
|
+
.map((d) => ` - ${d.key}@${d.version}`)
|
|
98
|
+
.join('\n');
|
|
99
|
+
const label = opts.resourceType.charAt(0).toUpperCase() + opts.resourceType.slice(1);
|
|
100
|
+
this.error(`${label} "${opts.resourceRef}" not found in local files.\n\nAvailable ${opts.resourceType}s:\n${available || ' (none)'}`, { exit: 1 });
|
|
101
|
+
}
|
|
102
|
+
targetId = targetDoc.id;
|
|
103
|
+
}
|
|
104
|
+
// Collect transitive dependencies + upload asset files
|
|
105
|
+
const dependentIds = graph.getTransitiveDependencies(targetId);
|
|
106
|
+
const relevantDocs = Array.from(dependentIds)
|
|
107
|
+
.map((id) => graph.nodes.get(id))
|
|
108
|
+
.filter((doc) => doc !== undefined);
|
|
109
|
+
const assetDocs = relevantDocs.filter((d) => d.kind === SchemaKind.Asset);
|
|
110
|
+
const assetFilePayloads = assetDocs
|
|
111
|
+
.map((d) => this.payloadBuilder.buildAssetPayload(d))
|
|
112
|
+
.filter((p) => p !== null);
|
|
113
|
+
const fileIdMap = await this.uploadAssetFiles(assetFilePayloads, opts.jsonOutput);
|
|
114
|
+
return {
|
|
115
|
+
graph,
|
|
116
|
+
missingDeps,
|
|
117
|
+
targetDoc,
|
|
118
|
+
targetId,
|
|
119
|
+
relevantDocs,
|
|
120
|
+
fileIdMap,
|
|
121
|
+
assetDocs,
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Validate YAML files in folder
|
|
126
|
+
*/
|
|
127
|
+
async validateYamlFiles(resolvedPath, jsonOutput) {
|
|
128
|
+
const spinner = jsonOutput
|
|
129
|
+
? null
|
|
130
|
+
: ora({
|
|
131
|
+
text: 'Validating YAML files...',
|
|
132
|
+
color: 'cyan',
|
|
133
|
+
}).start();
|
|
134
|
+
try {
|
|
135
|
+
const result = await this.resourceValidator.validateFolder(resolvedPath);
|
|
136
|
+
spinner?.stop();
|
|
137
|
+
return result;
|
|
138
|
+
}
|
|
139
|
+
catch (error) {
|
|
140
|
+
spinner?.fail('Validation failed');
|
|
141
|
+
this.error(error.message, { exit: 1 });
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Upload asset files using files/lookup + initiate-upload + GCS PUT
|
|
146
|
+
*/
|
|
147
|
+
async uploadAssetFiles(assetFiles, jsonOutput) {
|
|
148
|
+
const fileIdMap = new Map();
|
|
149
|
+
if (assetFiles.length === 0)
|
|
150
|
+
return fileIdMap;
|
|
151
|
+
const spinner = jsonOutput
|
|
152
|
+
? null
|
|
153
|
+
: ora({
|
|
154
|
+
text: 'Uploading asset files...',
|
|
155
|
+
color: 'cyan',
|
|
156
|
+
}).start();
|
|
157
|
+
try {
|
|
158
|
+
// Check which files already exist by hash
|
|
159
|
+
const hashes = assetFiles.map((f) => f.fileHash);
|
|
160
|
+
const existingFiles = await this.checkFilesExist(hashes);
|
|
161
|
+
const filesToUpload = [];
|
|
162
|
+
let reusedCount = 0;
|
|
163
|
+
for (const asset of assetFiles) {
|
|
164
|
+
const existingFileId = existingFiles.get(asset.fileHash);
|
|
165
|
+
if (existingFileId) {
|
|
166
|
+
fileIdMap.set(`${asset.assetKey}@${asset.assetVersion}`, existingFileId);
|
|
167
|
+
reusedCount++;
|
|
168
|
+
}
|
|
169
|
+
else {
|
|
170
|
+
filesToUpload.push(asset);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
// Initiate upload for new files — one request per file, parallelized.
|
|
174
|
+
if (filesToUpload.length > 0) {
|
|
175
|
+
await Promise.all(filesToUpload.map(async (asset) => {
|
|
176
|
+
const uploadInfo = await this.apiClient.post(`/v1/orgs/${this.orgId}/files/upload-url`, {
|
|
177
|
+
file: {
|
|
178
|
+
name: asset.fileName,
|
|
179
|
+
contentType: asset.contentType,
|
|
180
|
+
hash: asset.fileHash,
|
|
181
|
+
},
|
|
182
|
+
});
|
|
183
|
+
if (uploadInfo?.uploadUrl) {
|
|
184
|
+
const response = await fetch(uploadInfo.uploadUrl, {
|
|
185
|
+
method: 'PUT',
|
|
186
|
+
headers: { 'Content-Type': asset.contentType },
|
|
187
|
+
body: new Uint8Array(asset.content),
|
|
188
|
+
});
|
|
189
|
+
if (!response.ok) {
|
|
190
|
+
throw new Error(`File upload failed for ${asset.fileName} with status ${response.status}`);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
if (uploadInfo?.id) {
|
|
194
|
+
fileIdMap.set(`${asset.assetKey}@${asset.assetVersion}`, uploadInfo.id);
|
|
195
|
+
}
|
|
196
|
+
}));
|
|
197
|
+
}
|
|
198
|
+
spinner?.succeed(`File upload complete: ${reusedCount} reused, ${filesToUpload.length} uploaded`);
|
|
199
|
+
}
|
|
200
|
+
catch (error) {
|
|
201
|
+
spinner?.warn('Could not upload files');
|
|
202
|
+
throw error;
|
|
203
|
+
}
|
|
204
|
+
return fileIdMap;
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Parse a resource reference like "my_resource@1.0.0"
|
|
208
|
+
*/
|
|
209
|
+
parseResourceRef(ref, resourceType) {
|
|
210
|
+
const parts = ref.split('@');
|
|
211
|
+
if (parts.length !== 2 || !parts[0] || !parts[1]) {
|
|
212
|
+
this.error(`Invalid ${resourceType} reference: "${ref}". Expected format: key@version (e.g., my_${resourceType}@1.0.0)`, {
|
|
213
|
+
exit: 1,
|
|
214
|
+
suggestions: [`Example: my_${resourceType}@1.0.0`],
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
return { key: parts[0], version: parts[1] };
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* Check which files already exist in storage by their hashes. Issues one
|
|
221
|
+
* `GET /files?hash=…` per hash in parallel; for each hit, picks the most
|
|
222
|
+
* recently uploaded file.
|
|
223
|
+
*/
|
|
224
|
+
async checkFilesExist(hashes) {
|
|
225
|
+
const results = await Promise.all(hashes.map(async (hash) => {
|
|
226
|
+
const resp = await this.apiClient.get(`/v1/orgs/${this.orgId}/files?hash=${encodeURIComponent(hash)}&limit=1`);
|
|
227
|
+
return { hash, fileId: resp.data[0]?.id ?? null };
|
|
228
|
+
}));
|
|
229
|
+
const map = new Map();
|
|
230
|
+
for (const { hash, fileId } of results) {
|
|
231
|
+
if (fileId) {
|
|
232
|
+
map.set(hash, fileId);
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
return map;
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
//# sourceMappingURL=local-resource-loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local-resource-loader.js","sourceRoot":"","sources":["../../../../../src/lib/local-resource-loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,GAAG,MAAM,KAAK,CAAC;AAEtB,OAAO,EAEL,eAAe,GAGhB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EACL,oBAAoB,GAErB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAoBtD;;;;;GAKG;AACH,MAAM,OAAO,mBAAmB;IAIX;IACA;IACA;IACA;IACA;IAPF,iBAAiB,CAA0C;IAE5E,YACmB,SAAoB,EACpB,KAAa,EACb,cAA8B,EAC9B,GAA8B,EAC9B,KAGP;QAPO,cAAS,GAAT,SAAS,CAAW;QACpB,UAAK,GAAL,KAAK,CAAQ;QACb,mBAAc,GAAd,cAAc,CAAgB;QAC9B,QAAG,GAAH,GAAG,CAA2B;QAC9B,UAAK,GAAL,KAAK,CAGZ;QAEV,IAAI,CAAC,iBAAiB,GAAG,oBAAoB,EAAE,CAAC;IAClD,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,qBAAqB,CAAC,IAQ3B;QACC,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC3C,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YAC9B,IAAI,CAAC,KAAK,CAAC,mBAAmB,YAAY,EAAE,EAAE;gBAC5C,IAAI,EAAE,CAAC;gBACP,WAAW,EAAE;oBACX,mCAAmC;oBACnC,sCAAsC;oBACtC,mDAAmD;iBACpD;aACkB,CAAC,CAAC;QACzB,CAAC;QAED,sBAAsB;QACtB,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,MAAM,IAAI,CAAC,iBAAiB,CACrD,YAAY,EACZ,IAAI,CAAC,UAAU,CAChB,CAAC;QAEF,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;YACtB,IAAI,CAAC,SAAS,EAAE,qBAAqB,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;YAClE,IAAI,CAAC,KAAK,CAAC,+DAA+D,EAAE;gBAC1E,IAAI,EAAE,CAAC;aACY,CAAC,CAAC;QACzB,CAAC;QAED,MAAM,WAAW,GAAG,KAAK,CAAC,sBAAsB,EAAE,CAAC;QACnD,mFAAmF;QACnF,MAAM,uBAAuB,GAAG,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAC9D,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,IAAI,EAC9B,CAAC,CACF,CAAC;QACF,MAAM,qBAAqB,GAAG,OAAO,CAAC,MAAM,GAAG,uBAAuB,CAAC;QAEvE,IAAI,qBAAqB,GAAG,CAAC,EAAE,CAAC;YAC9B,IAAI,CAAC,SAAS,EAAE,qBAAqB,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;YAClE,IAAI,CAAC,KAAK,CAAC,mEAAmE,EAAE;gBAC9E,IAAI,EAAE,CAAC;aACY,CAAC,CAAC;QACzB,CAAC;QAED,IAAI,WAAW,CAAC,IAAI,GAAG,CAAC,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YAC5C,IAAI,CAAC,SAAS,EAAE,qBAAqB,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;YAClE,IAAI,CAAC,KAAK,CACR,uFAAuF,EACvF;gBACE,IAAI,EAAE,CAAC;gBACP,WAAW,EAAE;oBACX,oDAAoD;oBACpD,kEAAkE;iBACnE;aACkB,CACtB,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACrB,IAAI,CAAC,SAAS,EAAE,sBAAsB,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC3D,CAAC;QAED,kFAAkF;QAClF,IAAI,SAAqC,CAAC;QAC1C,IAAI,QAAoB,CAAC;QAEzB,IAAI,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACnC,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAC5C,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,YAAY,CAClB,CAAC;YACF,QAAQ,GAAG,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;YACrE,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAEtC,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;qBAC/C,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,YAAY,CAAC;qBAC3C,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;qBACvC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACd,MAAM,KAAK,GACT,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBACzE,IAAI,CAAC,KAAK,CACR,GAAG,KAAK,KAAK,GAAG,IAAI,OAAO,6BAA6B,IAAI,CAAC,YAAY,OAAO,SAAS,EAAE,EAC3F,EAAE,IAAI,EAAE,CAAC,EAAE,CACZ,CAAC;YACJ,CAAC;QACH,CAAC;aAAM,CAAC;YACN,oDAAoD;YACpD,SAAS,GAAG,KAAK,CAAC,iBAAiB,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;YAEzE,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;qBAC/C,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,YAAY,CAAC;qBAC3C,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;qBACvC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACd,MAAM,KAAK,GACT,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBACzE,IAAI,CAAC,KAAK,CACR,GAAG,KAAK,KAAK,IAAI,CAAC,WAAW,4CAA4C,IAAI,CAAC,YAAY,OAAO,SAAS,IAAI,UAAU,EAAE,EAC1H,EAAE,IAAI,EAAE,CAAC,EAAE,CACZ,CAAC;YACJ,CAAC;YAED,QAAQ,GAAG,SAAS,CAAC,EAAE,CAAC;QAC1B,CAAC;QAED,uDAAuD;QACvD,MAAM,YAAY,GAAG,KAAK,CAAC,yBAAyB,CAAC,QAAQ,CAAC,CAAC;QAC/D,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC;aAC1C,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;aAChC,MAAM,CAAC,CAAC,GAAG,EAAyB,EAAE,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC;QAE7D,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,KAAK,CAAC,CAAC;QAC1E,MAAM,iBAAiB,GAAG,SAAS;aAChC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;aACpD,MAAM,CAAC,CAAC,CAAC,EAAyB,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;QAEpD,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAC3C,iBAAiB,EACjB,IAAI,CAAC,UAAU,CAChB,CAAC;QAEF,OAAO;YACL,KAAK;YACL,WAAW;YACX,SAAS;YACT,QAAQ;YACR,YAAY;YACZ,SAAS;YACT,SAAS;SACV,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,iBAAiB,CACrB,YAAoB,EACpB,UAAmB;QAEnB,MAAM,OAAO,GAAG,UAAU;YACxB,CAAC,CAAC,IAAI;YACN,CAAC,CAAC,GAAG,CAAC;gBACF,IAAI,EAAE,0BAA0B;gBAChC,KAAK,EAAE,MAAM;aACd,CAAC,CAAC,KAAK,EAAE,CAAC;QAEf,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;YACzE,OAAO,EAAE,IAAI,EAAE,CAAC;YAChB,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC;YACnC,IAAI,CAAC,KAAK,CAAE,KAAe,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,gBAAgB,CACpB,UAA8B,EAC9B,UAAmB;QAEnB,MAAM,SAAS,GAAG,IAAI,GAAG,EAAkB,CAAC;QAC5C,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,SAAS,CAAC;QAE9C,MAAM,OAAO,GAAG,UAAU;YACxB,CAAC,CAAC,IAAI;YACN,CAAC,CAAC,GAAG,CAAC;gBACF,IAAI,EAAE,0BAA0B;gBAChC,KAAK,EAAE,MAAM;aACd,CAAC,CAAC,KAAK,EAAE,CAAC;QAEf,IAAI,CAAC;YACH,0CAA0C;YAC1C,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;YACjD,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;YAEzD,MAAM,aAAa,GAAuB,EAAE,CAAC;YAC7C,IAAI,WAAW,GAAG,CAAC,CAAC;YAEpB,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE,CAAC;gBAC/B,MAAM,cAAc,GAAG,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;gBACzD,IAAI,cAAc,EAAE,CAAC;oBACnB,SAAS,CAAC,GAAG,CACX,GAAG,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,YAAY,EAAE,EACzC,cAAc,CACf,CAAC;oBACF,WAAW,EAAE,CAAC;gBAChB,CAAC;qBAAM,CAAC;oBACN,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAC5B,CAAC;YACH,CAAC;YAED,sEAAsE;YACtE,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC7B,MAAM,OAAO,CAAC,GAAG,CACf,aAAa,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;oBAChC,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAC1C,YAAY,IAAI,CAAC,KAAK,mBAAmB,EACzC;wBACE,IAAI,EAAE;4BACJ,IAAI,EAAE,KAAK,CAAC,QAAQ;4BACpB,WAAW,EAAE,KAAK,CAAC,WAAW;4BAC9B,IAAI,EAAE,KAAK,CAAC,QAAQ;yBACrB;qBACF,CACF,CAAC;oBAEF,IAAI,UAAU,EAAE,SAAS,EAAE,CAAC;wBAC1B,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,UAAU,CAAC,SAAS,EAAE;4BACjD,MAAM,EAAE,KAAK;4BACb,OAAO,EAAE,EAAE,cAAc,EAAE,KAAK,CAAC,WAAW,EAAE;4BAC9C,IAAI,EAAE,IAAI,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC;yBACpC,CAAC,CAAC;wBACH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;4BACjB,MAAM,IAAI,KAAK,CACb,0BAA0B,KAAK,CAAC,QAAQ,gBAAgB,QAAQ,CAAC,MAAM,EAAE,CAC1E,CAAC;wBACJ,CAAC;oBACH,CAAC;oBAED,IAAI,UAAU,EAAE,EAAE,EAAE,CAAC;wBACnB,SAAS,CAAC,GAAG,CACX,GAAG,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,YAAY,EAAE,EACzC,UAAU,CAAC,EAAE,CACd,CAAC;oBACJ,CAAC;gBACH,CAAC,CAAC,CACH,CAAC;YACJ,CAAC;YAED,OAAO,EAAE,OAAO,CACd,yBAAyB,WAAW,YAAY,aAAa,CAAC,MAAM,WAAW,CAChF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,EAAE,IAAI,CAAC,wBAAwB,CAAC,CAAC;YACxC,MAAM,KAAK,CAAC;QACd,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;OAEG;IACH,gBAAgB,CACd,GAAW,EACX,YAAoB;QAEpB,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC7B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;YACjD,IAAI,CAAC,KAAK,CACR,WAAW,YAAY,gBAAgB,GAAG,6CAA6C,YAAY,SAAS,EAC5G;gBACE,IAAI,EAAE,CAAC;gBACP,WAAW,EAAE,CAAC,eAAe,YAAY,QAAQ,CAAC;aAC/B,CACtB,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;IAC9C,CAAC;IAED;;;;OAIG;IACK,KAAK,CAAC,eAAe,CAC3B,MAAgB;QAEhB,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAC/B,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;YACxB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CACnC,YAAY,IAAI,CAAC,KAAK,eAAe,kBAAkB,CACrD,IAAI,CACL,UAAU,CACZ,CAAC;YACF,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC;QACpD,CAAC,CAAC,CACH,CAAC;QAEF,MAAM,GAAG,GAAG,IAAI,GAAG,EAAkB,CAAC;QACtC,KAAK,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,OAAO,EAAE,CAAC;YACvC,IAAI,MAAM,EAAE,CAAC;gBACX,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YACxB,CAAC;QACH,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"path-utils.js","sourceRoot":"","sources":["../../../../../src/lib/path-utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AAClC,CAAC"}
|