@salesforce/b2c-tooling-sdk 0.3.0 → 0.4.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 +180 -13
- package/data/scaffolds/cartridge/files/.project.ejs +17 -0
- package/data/scaffolds/cartridge/files/cartridge/cartridge.properties.ejs +4 -0
- package/data/scaffolds/cartridge/files/cartridge/controllers/Example.js.ejs +19 -0
- package/data/scaffolds/cartridge/files/cartridge/models/example.js.ejs +14 -0
- package/data/scaffolds/cartridge/files/cartridge/scripts/helpers/exampleHelpers.js.ejs +18 -0
- package/data/scaffolds/cartridge/files/cartridge/static/default/css/example.css +6 -0
- package/data/scaffolds/cartridge/files/cartridge/templates/default/example/show.isml.ejs +11 -0
- package/data/scaffolds/cartridge/scaffold.json +88 -0
- package/data/scaffolds/controller/files/controller.js.ejs +134 -0
- package/data/scaffolds/controller/files/template.isml.ejs +22 -0
- package/data/scaffolds/controller/scaffold.json +64 -0
- package/data/scaffolds/custom-api/files/api.json.ejs +11 -0
- package/data/scaffolds/custom-api/files/schema.yaml.ejs +188 -0
- package/data/scaffolds/custom-api/files/script.js.ejs +95 -0
- package/data/scaffolds/custom-api/scaffold.json +65 -0
- package/data/scaffolds/hook/files/hook.js.ejs +99 -0
- package/data/scaffolds/hook/files/hooks-entry.json.ejs +6 -0
- package/data/scaffolds/hook/scaffold.json +60 -0
- package/data/scaffolds/job-step/files/step-chunk.js.ejs +136 -0
- package/data/scaffolds/job-step/files/step-task.js.ejs +47 -0
- package/data/scaffolds/job-step/files/steptypes-entry.json.ejs +41 -0
- package/data/scaffolds/job-step/scaffold.json +64 -0
- package/data/scaffolds/page-designer-component/files/component.isml.ejs +23 -0
- package/data/scaffolds/page-designer-component/files/component.js.ejs +35 -0
- package/data/scaffolds/page-designer-component/files/component.json.ejs +50 -0
- package/data/scaffolds/page-designer-component/scaffold.json +66 -0
- package/data/scaffolds/service/files/service-http.js.ejs +245 -0
- package/data/scaffolds/service/files/service-sftp.js.ejs +371 -0
- package/data/scaffolds/service/files/service-soap.js.ejs +230 -0
- package/data/scaffolds/service/scaffold.json +83 -0
- package/data/script-api/dw.extensions.payments.SalesforcePaymentsMgr.md +48 -0
- package/data/script-api/dw.system.Request.md +5 -0
- package/data/script-api/dw.web.Cookie.md +108 -31
- package/data/script-api/index.json +2 -2
- package/data/script-api/index.md +1 -1
- package/dist/cjs/auth/oauth-implicit.d.ts +1 -0
- package/dist/cjs/auth/oauth-implicit.js +8 -3
- package/dist/cjs/auth/oauth-implicit.js.map +1 -1
- package/dist/cjs/auth/oauth.d.ts +1 -0
- package/dist/cjs/auth/oauth.js +8 -3
- package/dist/cjs/auth/oauth.js.map +1 -1
- package/dist/cjs/auth/types.d.ts +5 -0
- package/dist/cjs/auth/types.js.map +1 -1
- package/dist/cjs/cli/am-command.d.ts +74 -0
- package/dist/cjs/cli/am-command.js +189 -0
- package/dist/cjs/cli/am-command.js.map +1 -0
- package/dist/cjs/cli/base-command.d.ts +38 -0
- package/dist/cjs/cli/base-command.js +142 -0
- package/dist/cjs/cli/base-command.js.map +1 -1
- package/dist/cjs/cli/config.d.ts +9 -0
- package/dist/cjs/cli/config.js +19 -2
- package/dist/cjs/cli/config.js.map +1 -1
- package/dist/cjs/cli/index.d.ts +1 -0
- package/dist/cjs/cli/index.js +1 -0
- package/dist/cjs/cli/index.js.map +1 -1
- package/dist/cjs/cli/instance-command.d.ts +1 -0
- package/dist/cjs/cli/oauth-command.d.ts +21 -1
- package/dist/cjs/cli/oauth-command.js +52 -7
- package/dist/cjs/cli/oauth-command.js.map +1 -1
- package/dist/cjs/cli/ods-command.d.ts +5 -1
- package/dist/cjs/cli/ods-command.js +10 -4
- package/dist/cjs/cli/ods-command.js.map +1 -1
- package/dist/cjs/cli/webdav-command.d.ts +1 -0
- package/dist/cjs/clients/am-api.d.ts +491 -0
- package/dist/cjs/clients/am-api.js +944 -0
- package/dist/cjs/clients/am-api.js.map +1 -0
- package/dist/cjs/clients/am-apiclients-api.generated.d.ts +803 -0
- package/dist/cjs/clients/am-apiclients-api.generated.js +6 -0
- package/dist/cjs/clients/am-apiclients-api.generated.js.map +1 -0
- package/dist/cjs/clients/am-roles-api.generated.d.ts +298 -0
- package/dist/cjs/clients/am-roles-api.generated.js +6 -0
- package/dist/cjs/clients/am-roles-api.generated.js.map +1 -0
- package/dist/cjs/clients/am-users-api.generated.d.ts +891 -0
- package/dist/cjs/clients/am-users-api.generated.js +6 -0
- package/dist/cjs/clients/am-users-api.generated.js.map +1 -0
- package/dist/cjs/clients/index.d.ts +4 -2
- package/dist/cjs/clients/index.js +2 -1
- package/dist/cjs/clients/index.js.map +1 -1
- package/dist/cjs/clients/middleware-registry.d.ts +1 -1
- package/dist/cjs/clients/middleware-registry.js.map +1 -1
- package/dist/cjs/clients/middleware.d.ts +49 -2
- package/dist/cjs/clients/middleware.js +214 -2
- package/dist/cjs/clients/middleware.js.map +1 -1
- package/dist/cjs/clients/mrt.js +5 -1
- package/dist/cjs/clients/mrt.js.map +1 -1
- package/dist/cjs/config/dw-json.d.ts +104 -33
- package/dist/cjs/config/dw-json.js +167 -2
- package/dist/cjs/config/dw-json.js.map +1 -1
- package/dist/cjs/config/index.d.ts +6 -4
- package/dist/cjs/config/index.js +6 -2
- package/dist/cjs/config/index.js.map +1 -1
- package/dist/cjs/config/instance-manager.d.ts +97 -0
- package/dist/cjs/config/instance-manager.js +166 -0
- package/dist/cjs/config/instance-manager.js.map +1 -0
- package/dist/cjs/config/mapping.d.ts +63 -5
- package/dist/cjs/config/mapping.js +165 -20
- package/dist/cjs/config/mapping.js.map +1 -1
- package/dist/cjs/config/sources/dw-json-source.d.ts +17 -1
- package/dist/cjs/config/sources/dw-json-source.js +70 -3
- package/dist/cjs/config/sources/dw-json-source.js.map +1 -1
- package/dist/cjs/config/sources/package-json-source.js +6 -3
- package/dist/cjs/config/sources/package-json-source.js.map +1 -1
- package/dist/cjs/config/types.d.ts +72 -0
- package/dist/cjs/defaults.d.ts +6 -0
- package/dist/cjs/defaults.js +6 -0
- package/dist/cjs/defaults.js.map +1 -1
- package/dist/cjs/i18n/index.js +3 -0
- package/dist/cjs/i18n/index.js.map +1 -1
- package/dist/cjs/index.d.ts +8 -4
- package/dist/cjs/index.js +9 -3
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/logging/logger.js +13 -1
- package/dist/cjs/logging/logger.js.map +1 -1
- package/dist/cjs/operations/content/asset-query.d.ts +22 -0
- package/dist/cjs/operations/content/asset-query.js +77 -0
- package/dist/cjs/operations/content/asset-query.js.map +1 -0
- package/dist/cjs/operations/content/export.d.ts +57 -0
- package/dist/cjs/operations/content/export.js +224 -0
- package/dist/cjs/operations/content/export.js.map +1 -0
- package/dist/cjs/operations/content/index.d.ts +43 -0
- package/dist/cjs/operations/content/index.js +48 -0
- package/dist/cjs/operations/content/index.js.map +1 -0
- package/dist/cjs/operations/content/library.d.ts +137 -0
- package/dist/cjs/operations/content/library.js +392 -0
- package/dist/cjs/operations/content/library.js.map +1 -0
- package/dist/cjs/operations/content/types.d.ts +144 -0
- package/dist/cjs/operations/content/types.js +7 -0
- package/dist/cjs/operations/content/types.js.map +1 -0
- package/dist/cjs/operations/mrt/b2c-config.js +19 -4
- package/dist/cjs/operations/mrt/b2c-config.js.map +1 -1
- package/dist/cjs/operations/mrt/index.d.ts +2 -0
- package/dist/cjs/operations/mrt/index.js +2 -0
- package/dist/cjs/operations/mrt/index.js.map +1 -1
- package/dist/cjs/operations/mrt/tail-logs.d.ts +130 -0
- package/dist/cjs/operations/mrt/tail-logs.js +223 -0
- package/dist/cjs/operations/mrt/tail-logs.js.map +1 -0
- package/dist/cjs/operations/ods/index.d.ts +2 -0
- package/dist/cjs/operations/ods/index.js +1 -0
- package/dist/cjs/operations/ods/index.js.map +1 -1
- package/dist/cjs/operations/ods/wait-for-sandbox.d.ts +64 -0
- package/dist/cjs/operations/ods/wait-for-sandbox.js +114 -0
- package/dist/cjs/operations/ods/wait-for-sandbox.js.map +1 -0
- package/dist/cjs/operations/orgs/index.d.ts +74 -0
- package/dist/cjs/operations/orgs/index.js +33 -0
- package/dist/cjs/operations/orgs/index.js.map +1 -0
- package/dist/cjs/operations/roles/index.d.ts +43 -0
- package/dist/cjs/operations/roles/index.js +48 -0
- package/dist/cjs/operations/roles/index.js.map +1 -0
- package/dist/cjs/operations/users/index.d.ts +143 -0
- package/dist/cjs/operations/users/index.js +141 -0
- package/dist/cjs/operations/users/index.js.map +1 -0
- package/dist/cjs/scaffold/engine.d.ts +68 -0
- package/dist/cjs/scaffold/engine.js +149 -0
- package/dist/cjs/scaffold/engine.js.map +1 -0
- package/dist/cjs/scaffold/executor.d.ts +36 -0
- package/dist/cjs/scaffold/executor.js +285 -0
- package/dist/cjs/scaffold/executor.js.map +1 -0
- package/dist/cjs/scaffold/index.d.ts +74 -0
- package/dist/cjs/scaffold/index.js +23 -0
- package/dist/cjs/scaffold/index.js.map +1 -0
- package/dist/cjs/scaffold/merge.d.ts +56 -0
- package/dist/cjs/scaffold/merge.js +183 -0
- package/dist/cjs/scaffold/merge.js.map +1 -0
- package/dist/cjs/scaffold/parameter-resolver.d.ts +86 -0
- package/dist/cjs/scaffold/parameter-resolver.js +179 -0
- package/dist/cjs/scaffold/parameter-resolver.js.map +1 -0
- package/dist/cjs/scaffold/registry.d.ts +45 -0
- package/dist/cjs/scaffold/registry.js +219 -0
- package/dist/cjs/scaffold/registry.js.map +1 -0
- package/dist/cjs/scaffold/sources.d.ts +45 -0
- package/dist/cjs/scaffold/sources.js +113 -0
- package/dist/cjs/scaffold/sources.js.map +1 -0
- package/dist/cjs/scaffold/types.d.ts +280 -0
- package/dist/cjs/scaffold/types.js +14 -0
- package/dist/cjs/scaffold/types.js.map +1 -0
- package/dist/cjs/scaffold/validation.d.ts +81 -0
- package/dist/cjs/scaffold/validation.js +250 -0
- package/dist/cjs/scaffold/validation.js.map +1 -0
- package/dist/cjs/scaffold/validators.d.ts +33 -0
- package/dist/cjs/scaffold/validators.js +334 -0
- package/dist/cjs/scaffold/validators.js.map +1 -0
- package/dist/cjs/telemetry/index.d.ts +26 -0
- package/dist/cjs/telemetry/index.js +32 -0
- package/dist/cjs/telemetry/index.js.map +1 -0
- package/dist/cjs/telemetry/telemetry.d.ts +90 -0
- package/dist/cjs/telemetry/telemetry.js +283 -0
- package/dist/cjs/telemetry/telemetry.js.map +1 -0
- package/dist/cjs/telemetry/types.d.ts +62 -0
- package/dist/cjs/telemetry/types.js +7 -0
- package/dist/cjs/telemetry/types.js.map +1 -0
- package/dist/esm/auth/oauth-implicit.d.ts +1 -0
- package/dist/esm/auth/oauth-implicit.js +8 -3
- package/dist/esm/auth/oauth-implicit.js.map +1 -1
- package/dist/esm/auth/oauth.d.ts +1 -0
- package/dist/esm/auth/oauth.js +8 -3
- package/dist/esm/auth/oauth.js.map +1 -1
- package/dist/esm/auth/types.d.ts +5 -0
- package/dist/esm/auth/types.js.map +1 -1
- package/dist/esm/cli/am-command.d.ts +74 -0
- package/dist/esm/cli/am-command.js +196 -0
- package/dist/esm/cli/am-command.js.map +1 -0
- package/dist/esm/cli/base-command.d.ts +38 -0
- package/dist/esm/cli/base-command.js +142 -0
- package/dist/esm/cli/base-command.js.map +1 -1
- package/dist/esm/cli/config.d.ts +9 -0
- package/dist/esm/cli/config.js +19 -2
- package/dist/esm/cli/config.js.map +1 -1
- package/dist/esm/cli/index.d.ts +1 -0
- package/dist/esm/cli/index.js +1 -0
- package/dist/esm/cli/index.js.map +1 -1
- package/dist/esm/cli/instance-command.d.ts +1 -0
- package/dist/esm/cli/oauth-command.d.ts +21 -1
- package/dist/esm/cli/oauth-command.js +52 -7
- package/dist/esm/cli/oauth-command.js.map +1 -1
- package/dist/esm/cli/ods-command.d.ts +5 -1
- package/dist/esm/cli/ods-command.js +10 -4
- package/dist/esm/cli/ods-command.js.map +1 -1
- package/dist/esm/cli/webdav-command.d.ts +1 -0
- package/dist/esm/clients/am-api.d.ts +491 -0
- package/dist/esm/clients/am-api.js +944 -0
- package/dist/esm/clients/am-api.js.map +1 -0
- package/dist/esm/clients/am-apiclients-api.generated.d.ts +803 -0
- package/dist/esm/clients/am-apiclients-api.generated.js +6 -0
- package/dist/esm/clients/am-apiclients-api.generated.js.map +1 -0
- package/dist/esm/clients/am-roles-api.generated.d.ts +298 -0
- package/dist/esm/clients/am-roles-api.generated.js +6 -0
- package/dist/esm/clients/am-roles-api.generated.js.map +1 -0
- package/dist/esm/clients/am-users-api.generated.d.ts +891 -0
- package/dist/esm/clients/am-users-api.generated.js +6 -0
- package/dist/esm/clients/am-users-api.generated.js.map +1 -0
- package/dist/esm/clients/index.d.ts +4 -2
- package/dist/esm/clients/index.js +2 -1
- package/dist/esm/clients/index.js.map +1 -1
- package/dist/esm/clients/middleware-registry.d.ts +1 -1
- package/dist/esm/clients/middleware-registry.js.map +1 -1
- package/dist/esm/clients/middleware.d.ts +49 -2
- package/dist/esm/clients/middleware.js +214 -2
- package/dist/esm/clients/middleware.js.map +1 -1
- package/dist/esm/clients/mrt.js +5 -1
- package/dist/esm/clients/mrt.js.map +1 -1
- package/dist/esm/config/dw-json.d.ts +104 -33
- package/dist/esm/config/dw-json.js +167 -2
- package/dist/esm/config/dw-json.js.map +1 -1
- package/dist/esm/config/index.d.ts +6 -4
- package/dist/esm/config/index.js +6 -2
- package/dist/esm/config/index.js.map +1 -1
- package/dist/esm/config/instance-manager.d.ts +97 -0
- package/dist/esm/config/instance-manager.js +166 -0
- package/dist/esm/config/instance-manager.js.map +1 -0
- package/dist/esm/config/mapping.d.ts +63 -5
- package/dist/esm/config/mapping.js +165 -20
- package/dist/esm/config/mapping.js.map +1 -1
- package/dist/esm/config/sources/dw-json-source.d.ts +17 -1
- package/dist/esm/config/sources/dw-json-source.js +70 -3
- package/dist/esm/config/sources/dw-json-source.js.map +1 -1
- package/dist/esm/config/sources/package-json-source.js +6 -3
- package/dist/esm/config/sources/package-json-source.js.map +1 -1
- package/dist/esm/config/types.d.ts +72 -0
- package/dist/esm/defaults.d.ts +6 -0
- package/dist/esm/defaults.js +6 -0
- package/dist/esm/defaults.js.map +1 -1
- package/dist/esm/i18n/index.js +3 -0
- package/dist/esm/i18n/index.js.map +1 -1
- package/dist/esm/index.d.ts +8 -4
- package/dist/esm/index.js +9 -3
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/logging/logger.js +13 -1
- package/dist/esm/logging/logger.js.map +1 -1
- package/dist/esm/operations/content/asset-query.d.ts +22 -0
- package/dist/esm/operations/content/asset-query.js +77 -0
- package/dist/esm/operations/content/asset-query.js.map +1 -0
- package/dist/esm/operations/content/export.d.ts +57 -0
- package/dist/esm/operations/content/export.js +224 -0
- package/dist/esm/operations/content/export.js.map +1 -0
- package/dist/esm/operations/content/index.d.ts +43 -0
- package/dist/esm/operations/content/index.js +48 -0
- package/dist/esm/operations/content/index.js.map +1 -0
- package/dist/esm/operations/content/library.d.ts +137 -0
- package/dist/esm/operations/content/library.js +392 -0
- package/dist/esm/operations/content/library.js.map +1 -0
- package/dist/esm/operations/content/types.d.ts +144 -0
- package/dist/esm/operations/content/types.js +7 -0
- package/dist/esm/operations/content/types.js.map +1 -0
- package/dist/esm/operations/mrt/b2c-config.js +19 -4
- package/dist/esm/operations/mrt/b2c-config.js.map +1 -1
- package/dist/esm/operations/mrt/index.d.ts +2 -0
- package/dist/esm/operations/mrt/index.js +2 -0
- package/dist/esm/operations/mrt/index.js.map +1 -1
- package/dist/esm/operations/mrt/tail-logs.d.ts +130 -0
- package/dist/esm/operations/mrt/tail-logs.js +223 -0
- package/dist/esm/operations/mrt/tail-logs.js.map +1 -0
- package/dist/esm/operations/ods/index.d.ts +2 -0
- package/dist/esm/operations/ods/index.js +1 -0
- package/dist/esm/operations/ods/index.js.map +1 -1
- package/dist/esm/operations/ods/wait-for-sandbox.d.ts +64 -0
- package/dist/esm/operations/ods/wait-for-sandbox.js +114 -0
- package/dist/esm/operations/ods/wait-for-sandbox.js.map +1 -0
- package/dist/esm/operations/orgs/index.d.ts +74 -0
- package/dist/esm/operations/orgs/index.js +33 -0
- package/dist/esm/operations/orgs/index.js.map +1 -0
- package/dist/esm/operations/roles/index.d.ts +43 -0
- package/dist/esm/operations/roles/index.js +48 -0
- package/dist/esm/operations/roles/index.js.map +1 -0
- package/dist/esm/operations/users/index.d.ts +143 -0
- package/dist/esm/operations/users/index.js +141 -0
- package/dist/esm/operations/users/index.js.map +1 -0
- package/dist/esm/scaffold/engine.d.ts +68 -0
- package/dist/esm/scaffold/engine.js +149 -0
- package/dist/esm/scaffold/engine.js.map +1 -0
- package/dist/esm/scaffold/executor.d.ts +36 -0
- package/dist/esm/scaffold/executor.js +285 -0
- package/dist/esm/scaffold/executor.js.map +1 -0
- package/dist/esm/scaffold/index.d.ts +74 -0
- package/dist/esm/scaffold/index.js +23 -0
- package/dist/esm/scaffold/index.js.map +1 -0
- package/dist/esm/scaffold/merge.d.ts +56 -0
- package/dist/esm/scaffold/merge.js +183 -0
- package/dist/esm/scaffold/merge.js.map +1 -0
- package/dist/esm/scaffold/parameter-resolver.d.ts +86 -0
- package/dist/esm/scaffold/parameter-resolver.js +179 -0
- package/dist/esm/scaffold/parameter-resolver.js.map +1 -0
- package/dist/esm/scaffold/registry.d.ts +45 -0
- package/dist/esm/scaffold/registry.js +219 -0
- package/dist/esm/scaffold/registry.js.map +1 -0
- package/dist/esm/scaffold/sources.d.ts +45 -0
- package/dist/esm/scaffold/sources.js +113 -0
- package/dist/esm/scaffold/sources.js.map +1 -0
- package/dist/esm/scaffold/types.d.ts +280 -0
- package/dist/esm/scaffold/types.js +14 -0
- package/dist/esm/scaffold/types.js.map +1 -0
- package/dist/esm/scaffold/validation.d.ts +81 -0
- package/dist/esm/scaffold/validation.js +250 -0
- package/dist/esm/scaffold/validation.js.map +1 -0
- package/dist/esm/scaffold/validators.d.ts +33 -0
- package/dist/esm/scaffold/validators.js +334 -0
- package/dist/esm/scaffold/validators.js.map +1 -0
- package/dist/esm/telemetry/index.d.ts +26 -0
- package/dist/esm/telemetry/index.js +32 -0
- package/dist/esm/telemetry/index.js.map +1 -0
- package/dist/esm/telemetry/telemetry.d.ts +90 -0
- package/dist/esm/telemetry/telemetry.js +283 -0
- package/dist/esm/telemetry/telemetry.js.map +1 -0
- package/dist/esm/telemetry/types.d.ts +62 -0
- package/dist/esm/telemetry/types.js +7 -0
- package/dist/esm/telemetry/types.js.map +1 -0
- package/package.json +86 -17
- package/specs/am-apiclients-api-v1.yaml +965 -0
- package/specs/am-roles-api-v1.yaml +316 -0
- package/specs/am-users-api-v1.yaml +1102 -0
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import type { TemplateHelpers } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Convert a string to kebab-case
|
|
4
|
+
*/
|
|
5
|
+
export declare function kebabCase(str: string): string;
|
|
6
|
+
/**
|
|
7
|
+
* Convert a string to camelCase
|
|
8
|
+
*/
|
|
9
|
+
export declare function camelCase(str: string): string;
|
|
10
|
+
/**
|
|
11
|
+
* Convert a string to PascalCase
|
|
12
|
+
*/
|
|
13
|
+
export declare function pascalCase(str: string): string;
|
|
14
|
+
/**
|
|
15
|
+
* Convert a string to snake_case
|
|
16
|
+
*/
|
|
17
|
+
export declare function snakeCase(str: string): string;
|
|
18
|
+
/**
|
|
19
|
+
* Create template helpers with current date/time
|
|
20
|
+
*/
|
|
21
|
+
export declare function createTemplateHelpers(): TemplateHelpers;
|
|
22
|
+
/**
|
|
23
|
+
* Template rendering context combining variables and helpers
|
|
24
|
+
*/
|
|
25
|
+
export interface TemplateContext extends TemplateHelpers {
|
|
26
|
+
[key: string]: string | boolean | string[] | number | ((str: string) => string) | (() => string);
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Create a full template context with variables and helpers
|
|
30
|
+
*/
|
|
31
|
+
export declare function createTemplateContext(variables: Record<string, string | boolean | string[]>): TemplateContext;
|
|
32
|
+
/**
|
|
33
|
+
* Render an EJS template string
|
|
34
|
+
* @param template - The EJS template string
|
|
35
|
+
* @param context - Template context with variables and helpers
|
|
36
|
+
* @returns Rendered string
|
|
37
|
+
*/
|
|
38
|
+
export declare function renderTemplate(template: string, context: TemplateContext): string;
|
|
39
|
+
/**
|
|
40
|
+
* Render a file path template (using double-brace variable syntax)
|
|
41
|
+
* @param pathTemplate - The path template string with double-brace placeholders
|
|
42
|
+
* @param context - Template context with variables and helpers
|
|
43
|
+
* @returns Rendered path string
|
|
44
|
+
*/
|
|
45
|
+
export declare function renderPathTemplate(pathTemplate: string, context: TemplateContext): string;
|
|
46
|
+
/**
|
|
47
|
+
* Scaffold template engine
|
|
48
|
+
*/
|
|
49
|
+
export declare class ScaffoldEngine {
|
|
50
|
+
private context;
|
|
51
|
+
constructor(variables: Record<string, string | boolean | string[]>);
|
|
52
|
+
/**
|
|
53
|
+
* Get the current template context
|
|
54
|
+
*/
|
|
55
|
+
getContext(): TemplateContext;
|
|
56
|
+
/**
|
|
57
|
+
* Render an EJS template string
|
|
58
|
+
*/
|
|
59
|
+
render(template: string): string;
|
|
60
|
+
/**
|
|
61
|
+
* Render a file path template
|
|
62
|
+
*/
|
|
63
|
+
renderPath(pathTemplate: string): string;
|
|
64
|
+
/**
|
|
65
|
+
* Render an EJS template file
|
|
66
|
+
*/
|
|
67
|
+
renderFile(filePath: string): Promise<string>;
|
|
68
|
+
}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2025, Salesforce, Inc.
|
|
3
|
+
* SPDX-License-Identifier: Apache-2
|
|
4
|
+
* For full license text, see the license.txt file in the repo root or http://www.apache.org/licenses/LICENSE-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { randomUUID } from 'node:crypto';
|
|
7
|
+
import ejs from 'ejs';
|
|
8
|
+
/**
|
|
9
|
+
* Convert a string to kebab-case
|
|
10
|
+
*/
|
|
11
|
+
export function kebabCase(str) {
|
|
12
|
+
return str
|
|
13
|
+
.replace(/([a-z])([A-Z])/g, '$1-$2')
|
|
14
|
+
.replace(/[\s_]+/g, '-')
|
|
15
|
+
.toLowerCase();
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Convert a string to camelCase
|
|
19
|
+
*/
|
|
20
|
+
export function camelCase(str) {
|
|
21
|
+
return str.replace(/[-_\s]+(.)?/g, (_, c) => (c ? c.toUpperCase() : '')).replace(/^[A-Z]/, (c) => c.toLowerCase());
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Convert a string to PascalCase
|
|
25
|
+
*/
|
|
26
|
+
export function pascalCase(str) {
|
|
27
|
+
const camel = camelCase(str);
|
|
28
|
+
return camel.charAt(0).toUpperCase() + camel.slice(1);
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Convert a string to snake_case
|
|
32
|
+
*/
|
|
33
|
+
export function snakeCase(str) {
|
|
34
|
+
return str
|
|
35
|
+
.replace(/([a-z])([A-Z])/g, '$1_$2')
|
|
36
|
+
.replace(/[-\s]+/g, '_')
|
|
37
|
+
.toLowerCase();
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Create template helpers with current date/time
|
|
41
|
+
*/
|
|
42
|
+
export function createTemplateHelpers() {
|
|
43
|
+
const now = new Date();
|
|
44
|
+
return {
|
|
45
|
+
kebabCase,
|
|
46
|
+
camelCase,
|
|
47
|
+
pascalCase,
|
|
48
|
+
snakeCase,
|
|
49
|
+
year: now.getFullYear(),
|
|
50
|
+
date: now.toISOString().split('T')[0],
|
|
51
|
+
uuid: () => randomUUID(),
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Create a full template context with variables and helpers
|
|
56
|
+
*/
|
|
57
|
+
export function createTemplateContext(variables) {
|
|
58
|
+
const helpers = createTemplateHelpers();
|
|
59
|
+
return {
|
|
60
|
+
...helpers,
|
|
61
|
+
...variables,
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Render an EJS template string
|
|
66
|
+
* @param template - The EJS template string
|
|
67
|
+
* @param context - Template context with variables and helpers
|
|
68
|
+
* @returns Rendered string
|
|
69
|
+
*/
|
|
70
|
+
export function renderTemplate(template, context) {
|
|
71
|
+
return ejs.render(template, context, {
|
|
72
|
+
// Allow includes with relative paths
|
|
73
|
+
root: '.',
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Render a file path template (using double-brace variable syntax)
|
|
78
|
+
* @param pathTemplate - The path template string with double-brace placeholders
|
|
79
|
+
* @param context - Template context with variables and helpers
|
|
80
|
+
* @returns Rendered path string
|
|
81
|
+
*/
|
|
82
|
+
export function renderPathTemplate(pathTemplate, context) {
|
|
83
|
+
// Convert {{variable}} syntax to values
|
|
84
|
+
return pathTemplate.replace(/\{\{([^}]+)\}\}/g, (_, expr) => {
|
|
85
|
+
const trimmed = expr.trim();
|
|
86
|
+
// Handle function calls like {{kebabCase moduleName}}
|
|
87
|
+
const funcMatch = trimmed.match(/^(\w+)\s+(.+)$/);
|
|
88
|
+
if (funcMatch) {
|
|
89
|
+
const [, funcName, argName] = funcMatch;
|
|
90
|
+
const func = context[funcName];
|
|
91
|
+
const arg = context[argName];
|
|
92
|
+
if (typeof func === 'function' && typeof arg === 'string') {
|
|
93
|
+
return func(arg);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
// Handle direct variable reference
|
|
97
|
+
const value = context[trimmed];
|
|
98
|
+
if (typeof value === 'function') {
|
|
99
|
+
// Only call 0-argument functions (like uuid)
|
|
100
|
+
if (value.length === 0) {
|
|
101
|
+
return value();
|
|
102
|
+
}
|
|
103
|
+
// Functions with arguments require the {{func arg}} syntax
|
|
104
|
+
return `{{${trimmed}}}`;
|
|
105
|
+
}
|
|
106
|
+
if (value !== undefined) {
|
|
107
|
+
return String(value);
|
|
108
|
+
}
|
|
109
|
+
// Return original if not found (will likely cause an error later)
|
|
110
|
+
return `{{${trimmed}}}`;
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Scaffold template engine
|
|
115
|
+
*/
|
|
116
|
+
export class ScaffoldEngine {
|
|
117
|
+
context;
|
|
118
|
+
constructor(variables) {
|
|
119
|
+
this.context = createTemplateContext(variables);
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Get the current template context
|
|
123
|
+
*/
|
|
124
|
+
getContext() {
|
|
125
|
+
return this.context;
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Render an EJS template string
|
|
129
|
+
*/
|
|
130
|
+
render(template) {
|
|
131
|
+
return renderTemplate(template, this.context);
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Render a file path template
|
|
135
|
+
*/
|
|
136
|
+
renderPath(pathTemplate) {
|
|
137
|
+
return renderPathTemplate(pathTemplate, this.context);
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Render an EJS template file
|
|
141
|
+
*/
|
|
142
|
+
async renderFile(filePath) {
|
|
143
|
+
const result = await ejs.renderFile(filePath, this.context, {
|
|
144
|
+
async: true,
|
|
145
|
+
});
|
|
146
|
+
return result;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
//# sourceMappingURL=engine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../../../src/scaffold/engine.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { Scaffold, ScaffoldGenerateOptions, ScaffoldGenerateResult } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Options for resolving output directory.
|
|
4
|
+
*/
|
|
5
|
+
export interface ResolveOutputDirectoryOptions {
|
|
6
|
+
/** Explicit output directory override */
|
|
7
|
+
outputDir?: string;
|
|
8
|
+
/** Scaffold with potential defaultOutputDir */
|
|
9
|
+
scaffold?: Scaffold;
|
|
10
|
+
/** Project root directory (defaults to cwd) */
|
|
11
|
+
projectRoot?: string;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Resolve output directory with priority:
|
|
15
|
+
* 1. Explicit outputDir option
|
|
16
|
+
* 2. Scaffold's defaultOutputDir
|
|
17
|
+
* 3. Project root / cwd
|
|
18
|
+
*
|
|
19
|
+
* @param options - Resolution options
|
|
20
|
+
* @returns Resolved absolute output directory path
|
|
21
|
+
*/
|
|
22
|
+
export declare function resolveOutputDirectory(options: ResolveOutputDirectoryOptions): string;
|
|
23
|
+
/**
|
|
24
|
+
* Generate files from a scaffold
|
|
25
|
+
* @param scaffold - The scaffold to use
|
|
26
|
+
* @param options - Generation options
|
|
27
|
+
* @returns Generation result
|
|
28
|
+
*/
|
|
29
|
+
export declare function generateFromScaffold(scaffold: Scaffold, options?: ScaffoldGenerateOptions): Promise<ScaffoldGenerateResult>;
|
|
30
|
+
/**
|
|
31
|
+
* Preview scaffold generation without writing files
|
|
32
|
+
* @param scaffold - The scaffold to preview
|
|
33
|
+
* @param options - Generation options
|
|
34
|
+
* @returns Preview result
|
|
35
|
+
*/
|
|
36
|
+
export declare function previewScaffold(scaffold: Scaffold, options?: Omit<ScaffoldGenerateOptions, 'dryRun'>): Promise<ScaffoldGenerateResult>;
|
|
@@ -0,0 +1,285 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2025, Salesforce, Inc.
|
|
3
|
+
* SPDX-License-Identifier: Apache-2
|
|
4
|
+
* For full license text, see the license.txt file in the repo root or http://www.apache.org/licenses/LICENSE-2.0
|
|
5
|
+
*/
|
|
6
|
+
import fs from 'node:fs/promises';
|
|
7
|
+
import path from 'node:path';
|
|
8
|
+
import { glob } from 'glob';
|
|
9
|
+
import { ScaffoldEngine } from './engine.js';
|
|
10
|
+
import { evaluateCondition, validateParameters } from './validators.js';
|
|
11
|
+
import { mergeJson, insertAfter, insertBefore, appendContent, prependContent } from './merge.js';
|
|
12
|
+
/**
|
|
13
|
+
* Resolve output directory with priority:
|
|
14
|
+
* 1. Explicit outputDir option
|
|
15
|
+
* 2. Scaffold's defaultOutputDir
|
|
16
|
+
* 3. Project root / cwd
|
|
17
|
+
*
|
|
18
|
+
* @param options - Resolution options
|
|
19
|
+
* @returns Resolved absolute output directory path
|
|
20
|
+
*/
|
|
21
|
+
export function resolveOutputDirectory(options) {
|
|
22
|
+
const { outputDir, scaffold, projectRoot = process.cwd() } = options;
|
|
23
|
+
if (outputDir) {
|
|
24
|
+
// Explicit output directory takes priority
|
|
25
|
+
return path.resolve(projectRoot, outputDir);
|
|
26
|
+
}
|
|
27
|
+
if (scaffold?.manifest.defaultOutputDir) {
|
|
28
|
+
// Scaffold's default output directory
|
|
29
|
+
return path.resolve(projectRoot, scaffold.manifest.defaultOutputDir);
|
|
30
|
+
}
|
|
31
|
+
// Fall back to project root
|
|
32
|
+
return projectRoot;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Check if a file exists
|
|
36
|
+
*/
|
|
37
|
+
async function fileExists(filePath) {
|
|
38
|
+
try {
|
|
39
|
+
await fs.access(filePath);
|
|
40
|
+
return true;
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
return false;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Get default file mappings by scanning the files/ directory
|
|
48
|
+
*/
|
|
49
|
+
async function getDefaultFileMappings(filesPath) {
|
|
50
|
+
const files = await glob('**/*', {
|
|
51
|
+
cwd: filesPath,
|
|
52
|
+
nodir: true,
|
|
53
|
+
dot: true,
|
|
54
|
+
});
|
|
55
|
+
return files.map((file) => ({
|
|
56
|
+
template: file,
|
|
57
|
+
destination: file.replace(/\.ejs$/, ''),
|
|
58
|
+
}));
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Generate files from a scaffold
|
|
62
|
+
* @param scaffold - The scaffold to use
|
|
63
|
+
* @param options - Generation options
|
|
64
|
+
* @returns Generation result
|
|
65
|
+
*/
|
|
66
|
+
export async function generateFromScaffold(scaffold, options = {}) {
|
|
67
|
+
const outputDir = options.outputDir || process.cwd();
|
|
68
|
+
const variables = options.variables || {};
|
|
69
|
+
const dryRun = options.dryRun ?? false;
|
|
70
|
+
const force = options.force ?? false;
|
|
71
|
+
// Validate parameters
|
|
72
|
+
const validationResult = validateParameters(scaffold.manifest, variables);
|
|
73
|
+
if (!validationResult.valid) {
|
|
74
|
+
const errorMessages = validationResult.errors.map((e) => `${e.parameter}: ${e.message}`).join(', ');
|
|
75
|
+
throw new Error(`Invalid parameters: ${errorMessages}`);
|
|
76
|
+
}
|
|
77
|
+
// Create template engine with resolved variables
|
|
78
|
+
const engine = new ScaffoldEngine(validationResult.values);
|
|
79
|
+
// Get file mappings
|
|
80
|
+
const fileMappings = scaffold.manifest.files || (await getDefaultFileMappings(scaffold.filesPath));
|
|
81
|
+
const generatedFiles = [];
|
|
82
|
+
const createdDirs = new Set();
|
|
83
|
+
for (const mapping of fileMappings) {
|
|
84
|
+
// Check condition
|
|
85
|
+
if (mapping.condition && !evaluateCondition(mapping.condition, validationResult.values)) {
|
|
86
|
+
continue;
|
|
87
|
+
}
|
|
88
|
+
const templatePath = path.join(scaffold.filesPath, mapping.template);
|
|
89
|
+
const destRendered = engine.renderPath(mapping.destination);
|
|
90
|
+
// If destination is absolute path, use it directly; otherwise join with outputDir
|
|
91
|
+
const destAbsolute = path.isAbsolute(destRendered) ? destRendered : path.join(outputDir, destRendered);
|
|
92
|
+
// For display purposes, show path relative to cwd
|
|
93
|
+
const destRelative = path.relative(process.cwd(), destAbsolute) || destAbsolute;
|
|
94
|
+
// Check if destination exists
|
|
95
|
+
const exists = await fileExists(destAbsolute);
|
|
96
|
+
const overwrite = mapping.overwrite || 'never';
|
|
97
|
+
if (exists) {
|
|
98
|
+
if (overwrite === 'never' && !force) {
|
|
99
|
+
generatedFiles.push({
|
|
100
|
+
path: destRelative,
|
|
101
|
+
absolutePath: destAbsolute,
|
|
102
|
+
action: 'skipped',
|
|
103
|
+
skipReason: 'File already exists',
|
|
104
|
+
});
|
|
105
|
+
continue;
|
|
106
|
+
}
|
|
107
|
+
if (overwrite === 'prompt' && !force) {
|
|
108
|
+
// In non-interactive mode without force, skip
|
|
109
|
+
generatedFiles.push({
|
|
110
|
+
path: destRelative,
|
|
111
|
+
absolutePath: destAbsolute,
|
|
112
|
+
action: 'skipped',
|
|
113
|
+
skipReason: 'File already exists (prompt required)',
|
|
114
|
+
});
|
|
115
|
+
continue;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
// Read and render template
|
|
119
|
+
let content;
|
|
120
|
+
try {
|
|
121
|
+
const templateContent = await fs.readFile(templatePath, 'utf-8');
|
|
122
|
+
// Only render EJS if the file has .ejs extension
|
|
123
|
+
if (mapping.template.endsWith('.ejs')) {
|
|
124
|
+
content = engine.render(templateContent);
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
content = templateContent;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
catch (error) {
|
|
131
|
+
throw new Error(`Failed to read template ${mapping.template}: ${error.message}`);
|
|
132
|
+
}
|
|
133
|
+
if (!dryRun) {
|
|
134
|
+
// Create parent directories
|
|
135
|
+
const destDir = path.dirname(destAbsolute);
|
|
136
|
+
if (!createdDirs.has(destDir)) {
|
|
137
|
+
await fs.mkdir(destDir, { recursive: true });
|
|
138
|
+
createdDirs.add(destDir);
|
|
139
|
+
}
|
|
140
|
+
// Write file
|
|
141
|
+
await fs.writeFile(destAbsolute, content, 'utf-8');
|
|
142
|
+
}
|
|
143
|
+
generatedFiles.push({
|
|
144
|
+
path: destRelative,
|
|
145
|
+
absolutePath: destAbsolute,
|
|
146
|
+
action: exists ? 'overwritten' : 'created',
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
// Process file modifications
|
|
150
|
+
if (scaffold.manifest.modifications) {
|
|
151
|
+
for (const modification of scaffold.manifest.modifications) {
|
|
152
|
+
// Check condition
|
|
153
|
+
if (modification.condition && !evaluateCondition(modification.condition, validationResult.values)) {
|
|
154
|
+
continue;
|
|
155
|
+
}
|
|
156
|
+
const targetRendered = engine.renderPath(modification.target);
|
|
157
|
+
const targetAbsolute = path.isAbsolute(targetRendered) ? targetRendered : path.join(outputDir, targetRendered);
|
|
158
|
+
const targetRelative = path.relative(process.cwd(), targetAbsolute) || targetAbsolute;
|
|
159
|
+
// Get modification content
|
|
160
|
+
let modContent;
|
|
161
|
+
if (modification.contentTemplate) {
|
|
162
|
+
const templatePath = path.join(scaffold.filesPath, modification.contentTemplate);
|
|
163
|
+
try {
|
|
164
|
+
const templateContent = await fs.readFile(templatePath, 'utf-8');
|
|
165
|
+
modContent = modification.contentTemplate.endsWith('.ejs') ? engine.render(templateContent) : templateContent;
|
|
166
|
+
}
|
|
167
|
+
catch (error) {
|
|
168
|
+
throw new Error(`Failed to read modification template ${modification.contentTemplate}: ${error.message}`);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
else if (modification.content) {
|
|
172
|
+
modContent = engine.render(modification.content);
|
|
173
|
+
}
|
|
174
|
+
else {
|
|
175
|
+
throw new Error(`Modification for ${modification.target} must have content or contentTemplate`);
|
|
176
|
+
}
|
|
177
|
+
// Process the modification
|
|
178
|
+
const result = await processModification(modification, targetAbsolute, targetRelative, modContent, dryRun);
|
|
179
|
+
generatedFiles.push(result);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
// Render post-instructions if present
|
|
183
|
+
let postInstructions;
|
|
184
|
+
if (scaffold.manifest.postInstructions) {
|
|
185
|
+
postInstructions = engine.render(scaffold.manifest.postInstructions);
|
|
186
|
+
}
|
|
187
|
+
return {
|
|
188
|
+
scaffold,
|
|
189
|
+
files: generatedFiles,
|
|
190
|
+
postInstructions,
|
|
191
|
+
dryRun,
|
|
192
|
+
outputDir,
|
|
193
|
+
};
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Process a single file modification
|
|
197
|
+
*/
|
|
198
|
+
async function processModification(modification, targetAbsolute, targetRelative, content, dryRun) {
|
|
199
|
+
const exists = await fileExists(targetAbsolute);
|
|
200
|
+
// For modifications, the file should exist (except for json-merge which can create)
|
|
201
|
+
if (!exists && modification.type !== 'json-merge') {
|
|
202
|
+
return {
|
|
203
|
+
path: targetRelative,
|
|
204
|
+
absolutePath: targetAbsolute,
|
|
205
|
+
action: 'skipped',
|
|
206
|
+
skipReason: `Target file does not exist for ${modification.type}`,
|
|
207
|
+
};
|
|
208
|
+
}
|
|
209
|
+
let existingContent = '';
|
|
210
|
+
if (exists) {
|
|
211
|
+
existingContent = await fs.readFile(targetAbsolute, 'utf-8');
|
|
212
|
+
}
|
|
213
|
+
let newContent;
|
|
214
|
+
try {
|
|
215
|
+
switch (modification.type) {
|
|
216
|
+
case 'json-merge': {
|
|
217
|
+
if (!exists) {
|
|
218
|
+
// Create new JSON file
|
|
219
|
+
newContent = JSON.stringify(JSON.parse(content), null, 2);
|
|
220
|
+
}
|
|
221
|
+
else {
|
|
222
|
+
newContent = mergeJson(existingContent, content, {
|
|
223
|
+
jsonPath: modification.jsonPath,
|
|
224
|
+
createPath: true,
|
|
225
|
+
});
|
|
226
|
+
}
|
|
227
|
+
break;
|
|
228
|
+
}
|
|
229
|
+
case 'insert-after': {
|
|
230
|
+
if (!modification.marker) {
|
|
231
|
+
throw new Error('insert-after requires a marker');
|
|
232
|
+
}
|
|
233
|
+
newContent = insertAfter(existingContent, content, modification.marker);
|
|
234
|
+
break;
|
|
235
|
+
}
|
|
236
|
+
case 'insert-before': {
|
|
237
|
+
if (!modification.marker) {
|
|
238
|
+
throw new Error('insert-before requires a marker');
|
|
239
|
+
}
|
|
240
|
+
newContent = insertBefore(existingContent, content, modification.marker);
|
|
241
|
+
break;
|
|
242
|
+
}
|
|
243
|
+
case 'append': {
|
|
244
|
+
newContent = appendContent(existingContent, content);
|
|
245
|
+
break;
|
|
246
|
+
}
|
|
247
|
+
case 'prepend': {
|
|
248
|
+
newContent = prependContent(existingContent, content);
|
|
249
|
+
break;
|
|
250
|
+
}
|
|
251
|
+
default: {
|
|
252
|
+
throw new Error(`Unknown modification type: ${modification.type}`);
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
catch (error) {
|
|
257
|
+
return {
|
|
258
|
+
path: targetRelative,
|
|
259
|
+
absolutePath: targetAbsolute,
|
|
260
|
+
action: 'skipped',
|
|
261
|
+
skipReason: `Modification failed: ${error.message}`,
|
|
262
|
+
};
|
|
263
|
+
}
|
|
264
|
+
if (!dryRun) {
|
|
265
|
+
// Create parent directories if needed
|
|
266
|
+
const targetDir = path.dirname(targetAbsolute);
|
|
267
|
+
await fs.mkdir(targetDir, { recursive: true });
|
|
268
|
+
await fs.writeFile(targetAbsolute, newContent, 'utf-8');
|
|
269
|
+
}
|
|
270
|
+
return {
|
|
271
|
+
path: targetRelative,
|
|
272
|
+
absolutePath: targetAbsolute,
|
|
273
|
+
action: exists ? 'merged' : 'created',
|
|
274
|
+
};
|
|
275
|
+
}
|
|
276
|
+
/**
|
|
277
|
+
* Preview scaffold generation without writing files
|
|
278
|
+
* @param scaffold - The scaffold to preview
|
|
279
|
+
* @param options - Generation options
|
|
280
|
+
* @returns Preview result
|
|
281
|
+
*/
|
|
282
|
+
export async function previewScaffold(scaffold, options = {}) {
|
|
283
|
+
return generateFromScaffold(scaffold, { ...options, dryRun: true });
|
|
284
|
+
}
|
|
285
|
+
//# sourceMappingURL=executor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"executor.js","sourceRoot":"","sources":["../../../src/scaffold/executor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Scaffold generation for B2C Commerce projects.
|
|
3
|
+
*
|
|
4
|
+
* This module provides functions for discovering, validating, and executing
|
|
5
|
+
* project scaffolds (templates) for cartridges, custom APIs, Page Designer
|
|
6
|
+
* components, jobs, and other B2C artifacts.
|
|
7
|
+
*
|
|
8
|
+
* ## Scaffold Discovery
|
|
9
|
+
*
|
|
10
|
+
* Scaffolds are discovered from multiple sources in priority order:
|
|
11
|
+
*
|
|
12
|
+
* 1. **Project scaffolds** (`.b2c/scaffolds/`) - highest priority
|
|
13
|
+
* 2. **Plugin scaffolds** (via `b2c:scaffold-providers` hook)
|
|
14
|
+
* 3. **User scaffolds** (`~/.b2c/scaffolds/`)
|
|
15
|
+
* 4. **Built-in scaffolds** - lowest priority
|
|
16
|
+
*
|
|
17
|
+
* Later sources override earlier ones by name.
|
|
18
|
+
*
|
|
19
|
+
* - {@link ScaffoldRegistry} - Registry for managing scaffold discovery
|
|
20
|
+
* - {@link createScaffoldRegistry} - Create a new registry instance
|
|
21
|
+
*
|
|
22
|
+
* ## Scaffold Generation
|
|
23
|
+
*
|
|
24
|
+
* - {@link generateFromScaffold} - Generate files from a scaffold
|
|
25
|
+
* - {@link previewScaffold} - Preview generation without writing files
|
|
26
|
+
*
|
|
27
|
+
* ## Template Engine
|
|
28
|
+
*
|
|
29
|
+
* - {@link ScaffoldEngine} - EJS-based template rendering engine
|
|
30
|
+
*
|
|
31
|
+
* ## Validation
|
|
32
|
+
*
|
|
33
|
+
* - {@link validateScaffoldManifest} - Validate a scaffold manifest
|
|
34
|
+
* - {@link validateParameters} - Validate parameter values
|
|
35
|
+
*
|
|
36
|
+
* ## Usage
|
|
37
|
+
*
|
|
38
|
+
* ```typescript
|
|
39
|
+
* import {
|
|
40
|
+
* createScaffoldRegistry,
|
|
41
|
+
* generateFromScaffold,
|
|
42
|
+
* } from '@salesforce/b2c-tooling-sdk/scaffold';
|
|
43
|
+
*
|
|
44
|
+
* // Create registry and find scaffolds
|
|
45
|
+
* const registry = createScaffoldRegistry();
|
|
46
|
+
* const scaffolds = await registry.getScaffolds();
|
|
47
|
+
*
|
|
48
|
+
* // Get a specific scaffold
|
|
49
|
+
* const cartridgeScaffold = await registry.getScaffold('cartridge');
|
|
50
|
+
*
|
|
51
|
+
* // Generate files
|
|
52
|
+
* const result = await generateFromScaffold(cartridgeScaffold, {
|
|
53
|
+
* outputDir: './output',
|
|
54
|
+
* variables: { cartridgeName: 'app_custom' },
|
|
55
|
+
* });
|
|
56
|
+
* ```
|
|
57
|
+
*
|
|
58
|
+
* @module scaffold
|
|
59
|
+
*/
|
|
60
|
+
export type { ScaffoldManifest, ScaffoldParameter, ScaffoldChoice, ScaffoldParameterType, ScaffoldCategory, DynamicParameterSource, FileMapping, FileModification, OverwriteBehavior, Scaffold, ScaffoldSource, ScaffoldDiscoveryOptions, ScaffoldProvider, ScaffoldProviderPriority, ScaffoldTransformer, ScaffoldContext, ScaffoldGenerateOptions, ScaffoldGenerateResult, GeneratedFile, ParameterValidationError, ParameterValidationResult, TemplateHelpers, SourceResult, } from './types.js';
|
|
61
|
+
export { SCAFFOLDS_DATA_DIR } from './types.js';
|
|
62
|
+
export { HOOK_POINTS, resolveLocalSource, resolveRemoteSource, isRemoteSource, validateAgainstSource, } from './sources.js';
|
|
63
|
+
export { ScaffoldRegistry, createScaffoldRegistry } from './registry.js';
|
|
64
|
+
export { ScaffoldEngine, createTemplateContext, createTemplateHelpers, renderTemplate, renderPathTemplate, kebabCase, camelCase, pascalCase, snakeCase, } from './engine.js';
|
|
65
|
+
export type { TemplateContext } from './engine.js';
|
|
66
|
+
export { generateFromScaffold, previewScaffold, resolveOutputDirectory } from './executor.js';
|
|
67
|
+
export type { ResolveOutputDirectoryOptions } from './executor.js';
|
|
68
|
+
export { validateScaffoldManifest, validateParameters, evaluateCondition, isValidScaffoldName, isValidParameterName, } from './validators.js';
|
|
69
|
+
export { mergeJson, insertAfter, insertBefore, appendContent, prependContent } from './merge.js';
|
|
70
|
+
export type { JsonMergeOptions, TextInsertOptions } from './merge.js';
|
|
71
|
+
export { resolveScaffoldParameters, parseParameterOptions, getParameterSchemas } from './parameter-resolver.js';
|
|
72
|
+
export type { ResolveParametersOptions, ParameterResolutionError, ResolvedParameters, ResolvedParameterSchema, } from './parameter-resolver.js';
|
|
73
|
+
export { validateEjsSyntax, checkTemplateFiles, checkOrphanedFiles, validateScaffoldDirectory } from './validation.js';
|
|
74
|
+
export type { ValidationIssueSeverity, ValidationIssue, ValidationResult, ValidateScaffoldOptions, } from './validation.js';
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2025, Salesforce, Inc.
|
|
3
|
+
* SPDX-License-Identifier: Apache-2
|
|
4
|
+
* For full license text, see the license.txt file in the repo root or http://www.apache.org/licenses/LICENSE-2.0
|
|
5
|
+
*/
|
|
6
|
+
export { SCAFFOLDS_DATA_DIR } from './types.js';
|
|
7
|
+
// Source resolution
|
|
8
|
+
export { HOOK_POINTS, resolveLocalSource, resolveRemoteSource, isRemoteSource, validateAgainstSource, } from './sources.js';
|
|
9
|
+
// Registry
|
|
10
|
+
export { ScaffoldRegistry, createScaffoldRegistry } from './registry.js';
|
|
11
|
+
// Engine
|
|
12
|
+
export { ScaffoldEngine, createTemplateContext, createTemplateHelpers, renderTemplate, renderPathTemplate, kebabCase, camelCase, pascalCase, snakeCase, } from './engine.js';
|
|
13
|
+
// Executor
|
|
14
|
+
export { generateFromScaffold, previewScaffold, resolveOutputDirectory } from './executor.js';
|
|
15
|
+
// Validators
|
|
16
|
+
export { validateScaffoldManifest, validateParameters, evaluateCondition, isValidScaffoldName, isValidParameterName, } from './validators.js';
|
|
17
|
+
// Merge utilities
|
|
18
|
+
export { mergeJson, insertAfter, insertBefore, appendContent, prependContent } from './merge.js';
|
|
19
|
+
// Parameter resolution
|
|
20
|
+
export { resolveScaffoldParameters, parseParameterOptions, getParameterSchemas } from './parameter-resolver.js';
|
|
21
|
+
// Validation
|
|
22
|
+
export { validateEjsSyntax, checkTemplateFiles, checkOrphanedFiles, validateScaffoldDirectory } from './validation.js';
|
|
23
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/scaffold/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAyFH,OAAO,EAAC,kBAAkB,EAAC,MAAM,YAAY,CAAC;AAE9C,oBAAoB;AACpB,OAAO,EACL,WAAW,EACX,kBAAkB,EAClB,mBAAmB,EACnB,cAAc,EACd,qBAAqB,GACtB,MAAM,cAAc,CAAC;AAEtB,WAAW;AACX,OAAO,EAAC,gBAAgB,EAAE,sBAAsB,EAAC,MAAM,eAAe,CAAC;AAEvE,SAAS;AACT,OAAO,EACL,cAAc,EACd,qBAAqB,EACrB,qBAAqB,EACrB,cAAc,EACd,kBAAkB,EAClB,SAAS,EACT,SAAS,EACT,UAAU,EACV,SAAS,GACV,MAAM,aAAa,CAAC;AAGrB,WAAW;AACX,OAAO,EAAC,oBAAoB,EAAE,eAAe,EAAE,sBAAsB,EAAC,MAAM,eAAe,CAAC;AAG5F,aAAa;AACb,OAAO,EACL,wBAAwB,EACxB,kBAAkB,EAClB,iBAAiB,EACjB,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,iBAAiB,CAAC;AAEzB,kBAAkB;AAClB,OAAO,EAAC,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,aAAa,EAAE,cAAc,EAAC,MAAM,YAAY,CAAC;AAG/F,uBAAuB;AACvB,OAAO,EAAC,yBAAyB,EAAE,qBAAqB,EAAE,mBAAmB,EAAC,MAAM,yBAAyB,CAAC;AAQ9G,aAAa;AACb,OAAO,EAAC,iBAAiB,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,yBAAyB,EAAC,MAAM,iBAAiB,CAAC"}
|