@contrail/cli 3.4.5-alpha.18160f5 → 3.4.6-alpha.c203463
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 +1 -1
- package/dist/commands/load-local/index.js +25 -30
- package/dist/helpers/pipeline/formatters.d.ts +2 -3
- package/dist/helpers/pipeline/formatters.js +63 -63
- package/node_modules/@contrail/entity-compare/CHANGELOG.md +13 -0
- package/node_modules/@contrail/entity-compare/README.md +0 -0
- package/node_modules/@contrail/entity-compare/lib/entity-compare/entity-compare.client.d.ts +36 -0
- package/node_modules/@contrail/entity-compare/lib/entity-compare/entity-compare.client.js +118 -0
- package/node_modules/@contrail/entity-compare/lib/entity-compare/index.d.ts +1 -0
- package/node_modules/@contrail/entity-compare/lib/entity-compare/index.js +17 -0
- package/node_modules/@contrail/entity-compare/lib/entity-compare/mockData.d.ts +11 -0
- package/node_modules/@contrail/entity-compare/lib/entity-compare/mockData.js +99 -0
- package/node_modules/@contrail/entity-compare/lib/index.d.ts +1 -0
- package/node_modules/@contrail/entity-compare/lib/index.js +17 -0
- package/node_modules/@contrail/entity-compare/package.json +45 -0
- package/node_modules/@contrail/loader/lib/__mocks__/@contrail/cache.d.ts +2 -0
- package/node_modules/@contrail/loader/lib/__mocks__/@contrail/cache.js +18 -0
- package/node_modules/@contrail/loader/lib/base-processor.d.ts +17 -0
- package/node_modules/@contrail/loader/lib/base-processor.js +26 -0
- package/node_modules/@contrail/loader/lib/color-processor.d.ts +19 -0
- package/node_modules/@contrail/loader/lib/color-processor.js +76 -0
- package/node_modules/@contrail/loader/lib/color-processor.spec.d.ts +1 -0
- package/node_modules/@contrail/loader/lib/color-processor.spec.js +307 -0
- package/node_modules/@contrail/loader/lib/common/conditional-columns.d.ts +16 -0
- package/node_modules/@contrail/loader/lib/common/conditional-columns.js +84 -0
- package/node_modules/@contrail/loader/lib/common/conditional-columns.spec.d.ts +1 -0
- package/node_modules/@contrail/loader/lib/common/conditional-columns.spec.js +644 -0
- package/node_modules/@contrail/loader/lib/common/constants.d.ts +1 -0
- package/node_modules/@contrail/loader/lib/common/constants.js +4 -0
- package/node_modules/@contrail/loader/lib/common/csv-file-helper.d.ts +6 -0
- package/node_modules/@contrail/loader/lib/common/csv-file-helper.js +66 -0
- package/node_modules/@contrail/loader/lib/common/csv-file-helper.spec.d.ts +1 -0
- package/node_modules/@contrail/loader/lib/common/csv-file-helper.spec.js +34 -0
- package/node_modules/@contrail/loader/lib/common/data-transformer-functions.d.ts +32 -0
- package/node_modules/@contrail/loader/lib/common/data-transformer-functions.js +309 -0
- package/node_modules/@contrail/loader/lib/common/data-transformer.spec.d.ts +1 -0
- package/node_modules/@contrail/loader/lib/common/data-transformer.spec.js +744 -0
- package/node_modules/@contrail/loader/lib/common/entities-helper.d.ts +33 -0
- package/node_modules/@contrail/loader/lib/common/entities-helper.js +300 -0
- package/node_modules/@contrail/loader/lib/common/entities-helper.spec.d.ts +1 -0
- package/node_modules/@contrail/loader/lib/common/entities-helper.spec.js +287 -0
- package/node_modules/@contrail/loader/lib/common/entity-builder-helpers.d.ts +6 -0
- package/node_modules/@contrail/loader/lib/common/entity-builder-helpers.js +114 -0
- package/node_modules/@contrail/loader/lib/common/entity-builder-helpers.spec.d.ts +1 -0
- package/node_modules/@contrail/loader/lib/common/entity-builder-helpers.spec.js +137 -0
- package/node_modules/@contrail/loader/lib/common/file-helper.d.ts +3 -0
- package/node_modules/@contrail/loader/lib/common/file-helper.js +37 -0
- package/node_modules/@contrail/loader/lib/common/file-helper.spec.d.ts +1 -0
- package/node_modules/@contrail/loader/lib/common/file-helper.spec.js +65 -0
- package/node_modules/@contrail/loader/lib/common/size-range-helpers.d.ts +42 -0
- package/node_modules/@contrail/loader/lib/common/size-range-helpers.js +162 -0
- package/node_modules/@contrail/loader/lib/common/size-range-helpers.spec.d.ts +1 -0
- package/node_modules/@contrail/loader/lib/common/size-range-helpers.spec.js +320 -0
- package/node_modules/@contrail/loader/lib/common/type-helper.d.ts +18 -0
- package/node_modules/@contrail/loader/lib/common/type-helper.js +232 -0
- package/node_modules/@contrail/loader/lib/common/type-helper.spec.d.ts +1 -0
- package/node_modules/@contrail/loader/lib/common/type-helper.spec.js +110 -0
- package/node_modules/@contrail/loader/lib/common/util.d.ts +11 -0
- package/node_modules/@contrail/loader/lib/common/util.js +85 -0
- package/node_modules/@contrail/loader/lib/common/util.spec.d.ts +1 -0
- package/node_modules/@contrail/loader/lib/common/util.spec.js +109 -0
- package/node_modules/@contrail/loader/lib/constants.d.ts +29 -0
- package/node_modules/@contrail/loader/lib/constants.js +32 -0
- package/node_modules/@contrail/loader/lib/custom-entity-processor.d.ts +20 -0
- package/node_modules/@contrail/loader/lib/custom-entity-processor.js +59 -0
- package/node_modules/@contrail/loader/lib/custom-entity-processor.spec.d.ts +1 -0
- package/node_modules/@contrail/loader/lib/custom-entity-processor.spec.js +161 -0
- package/node_modules/@contrail/loader/lib/entities-v2/base-processor-v2.d.ts +27 -0
- package/node_modules/@contrail/loader/lib/entities-v2/base-processor-v2.js +55 -0
- package/node_modules/@contrail/loader/lib/entities-v2/colors-v2/color-processor-v2.d.ts +19 -0
- package/node_modules/@contrail/loader/lib/entities-v2/colors-v2/color-processor-v2.js +92 -0
- package/node_modules/@contrail/loader/lib/entities-v2/colors-v2/color-processor-v2.spec.d.ts +1 -0
- package/node_modules/@contrail/loader/lib/entities-v2/colors-v2/color-processor-v2.spec.js +456 -0
- package/node_modules/@contrail/loader/lib/entities-v2/custom-entities-v2/custom-entity-processor-v2.d.ts +20 -0
- package/node_modules/@contrail/loader/lib/entities-v2/custom-entities-v2/custom-entity-processor-v2.js +75 -0
- package/node_modules/@contrail/loader/lib/entities-v2/custom-entities-v2/custom-entity-processor-v2.spec.d.ts +1 -0
- package/node_modules/@contrail/loader/lib/entities-v2/custom-entities-v2/custom-entity-processor-v2.spec.js +211 -0
- package/node_modules/@contrail/loader/lib/entities-v2/entities-helper.d.ts +33 -0
- package/node_modules/@contrail/loader/lib/entities-v2/entities-helper.js +298 -0
- package/node_modules/@contrail/loader/lib/entities-v2/entities-helper.spec.d.ts +1 -0
- package/node_modules/@contrail/loader/lib/entities-v2/entities-helper.spec.js +137 -0
- package/node_modules/@contrail/loader/lib/entities-v2/entity-processor-v2.d.ts +36 -0
- package/node_modules/@contrail/loader/lib/entities-v2/entity-processor-v2.js +316 -0
- package/node_modules/@contrail/loader/lib/entities-v2/entity-processor-v2.spec.d.ts +1 -0
- package/node_modules/@contrail/loader/lib/entities-v2/entity-processor-v2.spec.js +973 -0
- package/node_modules/@contrail/loader/lib/entities-v2/file-preprocessor-v2.d.ts +40 -0
- package/node_modules/@contrail/loader/lib/entities-v2/file-preprocessor-v2.js +276 -0
- package/node_modules/@contrail/loader/lib/entities-v2/file-preprocessor-v2.spec.d.ts +1 -0
- package/node_modules/@contrail/loader/lib/entities-v2/file-preprocessor-v2.spec.js +161 -0
- package/node_modules/@contrail/loader/lib/entities-v2/linesheet-v2/assortment-processor.d.ts +49 -0
- package/node_modules/@contrail/loader/lib/entities-v2/linesheet-v2/assortment-processor.js +388 -0
- package/node_modules/@contrail/loader/lib/entities-v2/linesheet-v2/assortment-processor.spec.d.ts +1 -0
- package/node_modules/@contrail/loader/lib/entities-v2/linesheet-v2/assortment-processor.spec.js +411 -0
- package/node_modules/@contrail/loader/lib/entities-v2/linesheet-v2/item-helper.d.ts +20 -0
- package/node_modules/@contrail/loader/lib/entities-v2/linesheet-v2/item-helper.js +193 -0
- package/node_modules/@contrail/loader/lib/entities-v2/linesheet-v2/item-helper.spec.d.ts +1 -0
- package/node_modules/@contrail/loader/lib/entities-v2/linesheet-v2/item-helper.spec.js +190 -0
- package/node_modules/@contrail/loader/lib/entities-v2/linesheet-v2/item-processor.d.ts +37 -0
- package/node_modules/@contrail/loader/lib/entities-v2/linesheet-v2/item-processor.js +271 -0
- package/node_modules/@contrail/loader/lib/entities-v2/linesheet-v2/item-processor.spec.d.ts +1 -0
- package/node_modules/@contrail/loader/lib/entities-v2/linesheet-v2/item-processor.spec.js +654 -0
- package/node_modules/@contrail/loader/lib/entities-v2/linesheet-v2/partial-assortment-processor.d.ts +35 -0
- package/node_modules/@contrail/loader/lib/entities-v2/linesheet-v2/partial-assortment-processor.js +242 -0
- package/node_modules/@contrail/loader/lib/entities-v2/linesheet-v2/partial-assortment-processor.spec.d.ts +1 -0
- package/node_modules/@contrail/loader/lib/entities-v2/linesheet-v2/partial-assortment-processor.spec.js +167 -0
- package/node_modules/@contrail/loader/lib/entities-v2/linesheet-v2/project-item-processor.d.ts +20 -0
- package/node_modules/@contrail/loader/lib/entities-v2/linesheet-v2/project-item-processor.js +104 -0
- package/node_modules/@contrail/loader/lib/entities-v2/linesheet-v2/project-item-processor.spec.d.ts +1 -0
- package/node_modules/@contrail/loader/lib/entities-v2/linesheet-v2/project-item-processor.spec.js +172 -0
- package/node_modules/@contrail/loader/lib/entity-processor.d.ts +34 -0
- package/node_modules/@contrail/loader/lib/entity-processor.js +214 -0
- package/node_modules/@contrail/loader/lib/entity-processor.spec.d.ts +1 -0
- package/node_modules/@contrail/loader/lib/entity-processor.spec.js +693 -0
- package/node_modules/@contrail/loader/lib/file-preprocessor.d.ts +31 -0
- package/node_modules/@contrail/loader/lib/file-preprocessor.js +212 -0
- package/node_modules/@contrail/loader/lib/file-preprocessor.spec.d.ts +1 -0
- package/node_modules/@contrail/loader/lib/file-preprocessor.spec.js +151 -0
- package/node_modules/@contrail/loader/lib/index.d.ts +9 -941
- package/node_modules/@contrail/loader/lib/index.js +25 -12492
- package/node_modules/@contrail/loader/lib/mockData.d.ts +36 -0
- package/node_modules/@contrail/loader/lib/mockData.js +209 -0
- package/node_modules/@contrail/loader/lib/pipeline/assortment-execute-helpers.d.ts +9 -0
- package/node_modules/@contrail/loader/lib/pipeline/assortment-execute-helpers.js +226 -0
- package/node_modules/@contrail/loader/lib/pipeline/assortment-execute-helpers.spec.d.ts +1 -0
- package/node_modules/@contrail/loader/lib/pipeline/assortment-execute-helpers.spec.js +305 -0
- package/node_modules/@contrail/loader/lib/pipeline/coerce-values-by-type.d.ts +7 -0
- package/node_modules/@contrail/loader/lib/pipeline/coerce-values-by-type.js +133 -0
- package/node_modules/@contrail/loader/lib/pipeline/execute-multi-type.spec.d.ts +1 -0
- package/node_modules/@contrail/loader/lib/pipeline/execute-multi-type.spec.js +454 -0
- package/node_modules/@contrail/loader/lib/pipeline/execute.d.ts +3 -0
- package/node_modules/@contrail/loader/lib/pipeline/execute.js +271 -0
- package/node_modules/@contrail/loader/lib/pipeline/execute.spec.d.ts +1 -0
- package/node_modules/@contrail/loader/lib/pipeline/execute.spec.js +186 -0
- package/node_modules/@contrail/loader/lib/pipeline/index.d.ts +7 -0
- package/node_modules/@contrail/loader/lib/pipeline/index.js +29 -0
- package/node_modules/@contrail/loader/lib/pipeline/item-execute-helpers.d.ts +38 -0
- package/node_modules/@contrail/loader/lib/pipeline/item-execute-helpers.js +517 -0
- package/node_modules/@contrail/loader/lib/pipeline/item-execute-helpers.spec.d.ts +1 -0
- package/node_modules/@contrail/loader/lib/pipeline/item-execute-helpers.spec.js +170 -0
- package/node_modules/@contrail/loader/lib/pipeline/loader-pipeline.d.ts +10 -0
- package/node_modules/@contrail/loader/lib/pipeline/loader-pipeline.js +26 -0
- package/node_modules/@contrail/loader/lib/pipeline/loader-pipeline.spec.d.ts +1 -0
- package/node_modules/@contrail/loader/lib/pipeline/loader-pipeline.spec.js +125 -0
- package/node_modules/@contrail/loader/lib/pipeline/preview.d.ts +3 -0
- package/node_modules/@contrail/loader/lib/pipeline/preview.js +219 -0
- package/node_modules/@contrail/loader/lib/pipeline/preview.spec.d.ts +1 -0
- package/node_modules/@contrail/loader/lib/pipeline/preview.spec.js +155 -0
- package/node_modules/@contrail/loader/lib/pipeline/project-item-execute-helpers.d.ts +5 -0
- package/node_modules/@contrail/loader/lib/pipeline/project-item-execute-helpers.js +580 -0
- package/node_modules/@contrail/loader/lib/pipeline/transform.d.ts +3 -0
- package/node_modules/@contrail/loader/lib/pipeline/transform.js +356 -0
- package/node_modules/@contrail/loader/lib/pipeline/transform.spec.d.ts +1 -0
- package/node_modules/@contrail/loader/lib/pipeline/transform.spec.js +442 -0
- package/node_modules/@contrail/loader/lib/pipeline/types.d.ts +251 -0
- package/node_modules/@contrail/loader/lib/pipeline/types.js +140 -0
- package/node_modules/@contrail/loader/lib/pipeline/validate.d.ts +2 -0
- package/node_modules/@contrail/loader/lib/pipeline/validate.js +1217 -0
- package/node_modules/@contrail/loader/lib/pipeline/validate.spec.d.ts +1 -0
- package/node_modules/@contrail/loader/lib/pipeline/validate.spec.js +1214 -0
- package/node_modules/@contrail/loader/lib/processor-registry.d.ts +3 -0
- package/node_modules/@contrail/loader/lib/processor-registry.js +53 -0
- package/node_modules/@contrail/loader/lib/processor-registry.spec.d.ts +1 -0
- package/node_modules/@contrail/loader/lib/processor-registry.spec.js +8 -0
- package/node_modules/@contrail/loader/package.json +9 -11
- package/node_modules/@contrail/telemetry/CHANGELOG.md +24 -0
- package/node_modules/@contrail/telemetry/README.md +1 -0
- package/node_modules/@contrail/telemetry/lib/index.d.ts +1 -0
- package/node_modules/@contrail/telemetry/lib/index.js +17 -0
- package/node_modules/@contrail/telemetry/lib/logger/index.d.ts +3 -0
- package/node_modules/@contrail/telemetry/lib/logger/index.js +30 -0
- package/node_modules/@contrail/telemetry/package.json +44 -0
- package/node_modules/@pinojs/redact/.github/dependabot.yml +13 -0
- package/node_modules/@pinojs/redact/.github/workflows/ci.yml +48 -0
- package/node_modules/@pinojs/redact/.github/workflows/publish-release.yml +43 -0
- package/node_modules/@pinojs/redact/LICENSE +21 -0
- package/node_modules/@pinojs/redact/README.md +350 -0
- package/node_modules/@pinojs/redact/benchmarks/basic.js +184 -0
- package/node_modules/@pinojs/redact/eslint.config.js +1 -0
- package/node_modules/@pinojs/redact/index.d.ts +52 -0
- package/node_modules/@pinojs/redact/index.js +529 -0
- package/node_modules/@pinojs/redact/index.test-d.ts +22 -0
- package/node_modules/@pinojs/redact/package.json +37 -0
- package/node_modules/@pinojs/redact/scripts/sync-version.mjs +20 -0
- package/node_modules/@pinojs/redact/test/actual-redact-comparison.test.js +211 -0
- package/node_modules/@pinojs/redact/test/index.test.js +824 -0
- package/node_modules/@pinojs/redact/test/integration.test.js +390 -0
- package/node_modules/@pinojs/redact/test/multiple-wildcards.test.js +227 -0
- package/node_modules/@pinojs/redact/test/prototype-pollution.test.js +223 -0
- package/node_modules/@pinojs/redact/test/selective-clone.test.js +115 -0
- package/node_modules/@pinojs/redact/tsconfig.json +19 -0
- package/node_modules/atomic-sleep/.travis.yml +11 -0
- package/node_modules/atomic-sleep/LICENSE +22 -0
- package/node_modules/atomic-sleep/index.js +38 -0
- package/node_modules/atomic-sleep/package.json +37 -0
- package/node_modules/atomic-sleep/readme.md +58 -0
- package/node_modules/atomic-sleep/test.js +47 -0
- package/node_modules/on-exit-leak-free/.github/dependabot.yml +12 -0
- package/node_modules/on-exit-leak-free/.github/workflows/ci.yml +46 -0
- package/node_modules/on-exit-leak-free/LICENSE +21 -0
- package/node_modules/on-exit-leak-free/README.md +54 -0
- package/node_modules/on-exit-leak-free/index.js +108 -0
- package/node_modules/on-exit-leak-free/package.json +37 -0
- package/node_modules/on-exit-leak-free/test/base.test.js +30 -0
- package/node_modules/on-exit-leak-free/test/event-emitter-leak.test.js +23 -0
- package/node_modules/on-exit-leak-free/test/fixtures/beforeExit.js +33 -0
- package/node_modules/on-exit-leak-free/test/fixtures/close.js +21 -0
- package/node_modules/on-exit-leak-free/test/fixtures/gc-not-close.js +24 -0
- package/node_modules/on-exit-leak-free/test/fixtures/unregister.js +24 -0
- package/node_modules/pino/.nojekyll +0 -0
- package/node_modules/pino/.prettierignore +1 -0
- package/node_modules/pino/CNAME +1 -0
- package/node_modules/pino/CONTRIBUTING.md +30 -0
- package/node_modules/pino/LICENSE +21 -0
- package/node_modules/pino/README.md +177 -0
- package/node_modules/pino/SECURITY.md +87 -0
- package/node_modules/pino/benchmarks/basic.bench.js +95 -0
- package/node_modules/pino/benchmarks/child-child.bench.js +52 -0
- package/node_modules/pino/benchmarks/child-creation.bench.js +73 -0
- package/node_modules/pino/benchmarks/child.bench.js +62 -0
- package/node_modules/pino/benchmarks/deep-object.bench.js +88 -0
- package/node_modules/pino/benchmarks/formatters.bench.js +50 -0
- package/node_modules/pino/benchmarks/internal/custom-levels.js +67 -0
- package/node_modules/pino/benchmarks/internal/just-pino-heavy.bench.js +76 -0
- package/node_modules/pino/benchmarks/internal/just-pino.bench.js +182 -0
- package/node_modules/pino/benchmarks/internal/parent-vs-child.bench.js +75 -0
- package/node_modules/pino/benchmarks/internal/redact.bench.js +86 -0
- package/node_modules/pino/benchmarks/long-string.bench.js +81 -0
- package/node_modules/pino/benchmarks/multi-arg.bench.js +193 -0
- package/node_modules/pino/benchmarks/multistream.js +98 -0
- package/node_modules/pino/benchmarks/object.bench.js +82 -0
- package/node_modules/pino/benchmarks/utils/generate-benchmark-doc.js +36 -0
- package/node_modules/pino/benchmarks/utils/runbench.js +138 -0
- package/node_modules/pino/benchmarks/utils/wrap-log-level.js +55 -0
- package/node_modules/pino/bin.js +6 -0
- package/node_modules/pino/browser.js +547 -0
- package/node_modules/pino/build/sync-version.js +25 -0
- package/node_modules/pino/docs/api.md +1593 -0
- package/node_modules/pino/docs/asynchronous.md +40 -0
- package/node_modules/pino/docs/benchmarks.md +55 -0
- package/node_modules/pino/docs/browser.md +278 -0
- package/node_modules/pino/docs/bundling.md +40 -0
- package/node_modules/pino/docs/child-loggers.md +95 -0
- package/node_modules/pino/docs/diagnostics.md +16 -0
- package/node_modules/pino/docs/ecosystem.md +86 -0
- package/node_modules/pino/docs/help.md +345 -0
- package/node_modules/pino/docs/lts.md +64 -0
- package/node_modules/pino/docs/pretty.md +35 -0
- package/node_modules/pino/docs/redaction.md +135 -0
- package/node_modules/pino/docs/transports.md +1376 -0
- package/node_modules/pino/docs/web.md +309 -0
- package/node_modules/pino/eslint.config.js +28 -0
- package/node_modules/pino/examples/basic.js +43 -0
- package/node_modules/pino/examples/transport.js +68 -0
- package/node_modules/pino/favicon.ico +0 -0
- package/node_modules/pino/file.js +12 -0
- package/node_modules/pino/inc-version.sh +42 -0
- package/node_modules/pino/index.html +55 -0
- package/node_modules/pino/lib/caller.js +30 -0
- package/node_modules/pino/lib/constants.js +28 -0
- package/node_modules/pino/lib/deprecations.js +8 -0
- package/node_modules/pino/lib/levels.js +241 -0
- package/node_modules/pino/lib/meta.js +3 -0
- package/node_modules/pino/lib/multistream.js +203 -0
- package/node_modules/pino/lib/proto.js +256 -0
- package/node_modules/pino/lib/redaction.js +114 -0
- package/node_modules/pino/lib/symbols.js +74 -0
- package/node_modules/pino/lib/time.js +39 -0
- package/node_modules/pino/lib/tools.js +427 -0
- package/node_modules/pino/lib/transport-stream.js +56 -0
- package/node_modules/pino/lib/transport.js +289 -0
- package/node_modules/pino/lib/worker.js +194 -0
- package/node_modules/pino/package.json +120 -0
- package/node_modules/pino/pino.d.ts +908 -0
- package/node_modules/pino/pino.js +234 -0
- package/node_modules/pino/test/basic.test.js +886 -0
- package/node_modules/pino/test/broken-pipe.test.js +59 -0
- package/node_modules/pino/test/browser-child.test.js +132 -0
- package/node_modules/pino/test/browser-disabled.test.js +87 -0
- package/node_modules/pino/test/browser-early-console-freeze.test.js +12 -0
- package/node_modules/pino/test/browser-is-level-enabled.test.js +101 -0
- package/node_modules/pino/test/browser-levels.test.js +241 -0
- package/node_modules/pino/test/browser-serializers.test.js +352 -0
- package/node_modules/pino/test/browser-timestamp.test.js +88 -0
- package/node_modules/pino/test/browser-transmit.test.js +417 -0
- package/node_modules/pino/test/browser.test.js +698 -0
- package/node_modules/pino/test/complex-objects.test.js +36 -0
- package/node_modules/pino/test/crlf.test.js +34 -0
- package/node_modules/pino/test/custom-levels.test.js +267 -0
- package/node_modules/pino/test/diagnostics.test.js +107 -0
- package/node_modules/pino/test/error-key.test.js +37 -0
- package/node_modules/pino/test/error.test.js +403 -0
- package/node_modules/pino/test/escaping.test.js +93 -0
- package/node_modules/pino/test/esm/esm.mjs +14 -0
- package/node_modules/pino/test/esm/index.test.js +21 -0
- package/node_modules/pino/test/esm/named-exports.mjs +29 -0
- package/node_modules/pino/test/exit.test.js +79 -0
- package/node_modules/pino/test/fixtures/broken-pipe/basic.js +9 -0
- package/node_modules/pino/test/fixtures/broken-pipe/destination.js +10 -0
- package/node_modules/pino/test/fixtures/broken-pipe/syncfalse.js +12 -0
- package/node_modules/pino/test/fixtures/console-transport.js +13 -0
- package/node_modules/pino/test/fixtures/crashing-transport.js +13 -0
- package/node_modules/pino/test/fixtures/default-exit.js +8 -0
- package/node_modules/pino/test/fixtures/destination-exit.js +8 -0
- package/node_modules/pino/test/fixtures/eval/index.js +13 -0
- package/node_modules/pino/test/fixtures/eval/node_modules/14-files.js +3 -0
- package/node_modules/pino/test/fixtures/eval/node_modules/2-files.js +3 -0
- package/node_modules/pino/test/fixtures/eval/node_modules/file1.js +5 -0
- package/node_modules/pino/test/fixtures/eval/node_modules/file10.js +5 -0
- package/node_modules/pino/test/fixtures/eval/node_modules/file11.js +5 -0
- package/node_modules/pino/test/fixtures/eval/node_modules/file12.js +5 -0
- package/node_modules/pino/test/fixtures/eval/node_modules/file13.js +5 -0
- package/node_modules/pino/test/fixtures/eval/node_modules/file14.js +11 -0
- package/node_modules/pino/test/fixtures/eval/node_modules/file2.js +5 -0
- package/node_modules/pino/test/fixtures/eval/node_modules/file3.js +5 -0
- package/node_modules/pino/test/fixtures/eval/node_modules/file4.js +5 -0
- package/node_modules/pino/test/fixtures/eval/node_modules/file5.js +5 -0
- package/node_modules/pino/test/fixtures/eval/node_modules/file6.js +5 -0
- package/node_modules/pino/test/fixtures/eval/node_modules/file7.js +5 -0
- package/node_modules/pino/test/fixtures/eval/node_modules/file8.js +5 -0
- package/node_modules/pino/test/fixtures/eval/node_modules/file9.js +5 -0
- package/node_modules/pino/test/fixtures/noop-transport.js +10 -0
- package/node_modules/pino/test/fixtures/pretty/null-prototype.js +8 -0
- package/node_modules/pino/test/fixtures/stdout-hack-protection.js +11 -0
- package/node_modules/pino/test/fixtures/syncfalse-child.js +6 -0
- package/node_modules/pino/test/fixtures/syncfalse-exit.js +9 -0
- package/node_modules/pino/test/fixtures/syncfalse-flush-exit.js +10 -0
- package/node_modules/pino/test/fixtures/syncfalse.js +6 -0
- package/node_modules/pino/test/fixtures/syntax-error-esm.mjs +2 -0
- package/node_modules/pino/test/fixtures/to-file-transport-with-transform.js +20 -0
- package/node_modules/pino/test/fixtures/to-file-transport.js +13 -0
- package/node_modules/pino/test/fixtures/to-file-transport.mjs +8 -0
- package/node_modules/pino/test/fixtures/transport/index.js +12 -0
- package/node_modules/pino/test/fixtures/transport/package.json +5 -0
- package/node_modules/pino/test/fixtures/transport-exit-immediately-with-async-dest.js +16 -0
- package/node_modules/pino/test/fixtures/transport-exit-immediately.js +11 -0
- package/node_modules/pino/test/fixtures/transport-exit-on-ready.js +12 -0
- package/node_modules/pino/test/fixtures/transport-invalid-node-options.js +26 -0
- package/node_modules/pino/test/fixtures/transport-main.js +9 -0
- package/node_modules/pino/test/fixtures/transport-many-lines.js +29 -0
- package/node_modules/pino/test/fixtures/transport-preload-main.mjs +13 -0
- package/node_modules/pino/test/fixtures/transport-preload.mjs +13 -0
- package/node_modules/pino/test/fixtures/transport-string-stdout.js +9 -0
- package/node_modules/pino/test/fixtures/transport-transform.js +21 -0
- package/node_modules/pino/test/fixtures/transport-uses-pino-config.js +33 -0
- package/node_modules/pino/test/fixtures/transport-with-on-exit.js +12 -0
- package/node_modules/pino/test/fixtures/transport-worker-data.js +19 -0
- package/node_modules/pino/test/fixtures/transport-worker-name.js +24 -0
- package/node_modules/pino/test/fixtures/transport-worker.js +15 -0
- package/node_modules/pino/test/fixtures/transport-wrong-export-type.js +3 -0
- package/node_modules/pino/test/fixtures/ts/to-file-transport-native.mts +15 -0
- package/node_modules/pino/test/fixtures/ts/to-file-transport-with-transform.ts +18 -0
- package/node_modules/pino/test/fixtures/ts/to-file-transport.ts +11 -0
- package/node_modules/pino/test/fixtures/ts/transpile.cjs +36 -0
- package/node_modules/pino/test/fixtures/ts/transport-exit-immediately-with-async-dest.ts +15 -0
- package/node_modules/pino/test/fixtures/ts/transport-exit-immediately.ts +10 -0
- package/node_modules/pino/test/fixtures/ts/transport-exit-on-ready.ts +11 -0
- package/node_modules/pino/test/fixtures/ts/transport-main.ts +8 -0
- package/node_modules/pino/test/fixtures/ts/transport-string-stdout.ts +8 -0
- package/node_modules/pino/test/fixtures/ts/transport-worker.ts +14 -0
- package/node_modules/pino/test/formatters.test.js +364 -0
- package/node_modules/pino/test/helper.d.ts +4 -0
- package/node_modules/pino/test/helper.js +155 -0
- package/node_modules/pino/test/hooks.test.js +114 -0
- package/node_modules/pino/test/http.test.js +214 -0
- package/node_modules/pino/test/internals/version.test.js +17 -0
- package/node_modules/pino/test/is-level-enabled.test.js +179 -0
- package/node_modules/pino/test/jest/basic.spec.js +10 -0
- package/node_modules/pino/test/levels.test.js +810 -0
- package/node_modules/pino/test/metadata.test.js +120 -0
- package/node_modules/pino/test/mixin-merge-strategy.test.js +57 -0
- package/node_modules/pino/test/mixin.test.js +241 -0
- package/node_modules/pino/test/multistream.test.js +729 -0
- package/node_modules/pino/test/redact.test.js +893 -0
- package/node_modules/pino/test/serializers.test.js +257 -0
- package/node_modules/pino/test/stdout-protection.test.js +41 -0
- package/node_modules/pino/test/syncfalse.test.js +186 -0
- package/node_modules/pino/test/timestamp-nano.test.js +37 -0
- package/node_modules/pino/test/timestamp.test.js +124 -0
- package/node_modules/pino/test/transport/big.test.js +42 -0
- package/node_modules/pino/test/transport/bundlers-support.test.js +99 -0
- package/node_modules/pino/test/transport/caller.test.js +24 -0
- package/node_modules/pino/test/transport/core.test.js +733 -0
- package/node_modules/pino/test/transport/core.transpiled.test.ts +114 -0
- package/node_modules/pino/test/transport/crash.test.js +36 -0
- package/node_modules/pino/test/transport/module-link.test.js +241 -0
- package/node_modules/pino/test/transport/native-type-stripping.test.mjs +151 -0
- package/node_modules/pino/test/transport/node-options.test.js +116 -0
- package/node_modules/pino/test/transport/pipeline.test.js +137 -0
- package/node_modules/pino/test/transport/preload.test.js +54 -0
- package/node_modules/pino/test/transport/repl.test.js +15 -0
- package/node_modules/pino/test/transport/sync-false.test.js +67 -0
- package/node_modules/pino/test/transport/sync-true.test.js +57 -0
- package/node_modules/pino/test/transport/targets.test.js +48 -0
- package/node_modules/pino/test/transport/uses-pino-config.test.js +166 -0
- package/node_modules/pino/test/transport-stream.test.js +40 -0
- package/node_modules/pino/test/types/pino-import.test-d.cts +30 -0
- package/node_modules/pino/test/types/pino-multistream.test-d.ts +28 -0
- package/node_modules/pino/test/types/pino-top-export.test-d.ts +34 -0
- package/node_modules/pino/test/types/pino-transport.test-d.ts +156 -0
- package/node_modules/pino/test/types/pino-type-only.test-d.ts +75 -0
- package/node_modules/pino/test/types/pino.test-d.ts +683 -0
- package/node_modules/pino/test/types/pino.ts +91 -0
- package/node_modules/pino/tsconfig.json +14 -0
- package/node_modules/pino-abstract-transport/.github/dependabot.yml +13 -0
- package/node_modules/pino-abstract-transport/.github/workflows/ci.yml +80 -0
- package/node_modules/pino-abstract-transport/.husky/pre-commit +4 -0
- package/node_modules/pino-abstract-transport/LICENSE +21 -0
- package/node_modules/pino-abstract-transport/README.md +171 -0
- package/node_modules/pino-abstract-transport/index.d.ts +122 -0
- package/node_modules/pino-abstract-transport/index.js +128 -0
- package/node_modules/pino-abstract-transport/package.json +41 -0
- package/node_modules/pino-abstract-transport/test/base.test.js +473 -0
- package/node_modules/pino-abstract-transport/test/fixtures/transport-async-iteration.js +22 -0
- package/node_modules/pino-abstract-transport/test/fixtures/transport-on-data.js +22 -0
- package/node_modules/pino-abstract-transport/test/fixtures/transport-transform.js +24 -0
- package/node_modules/pino-abstract-transport/test/fixtures/worker-pipeline.js +15 -0
- package/node_modules/pino-abstract-transport/test/match.js +24 -0
- package/node_modules/pino-abstract-transport/test/types/index.test-d.ts +31 -0
- package/node_modules/pino-abstract-transport/test/worker.test.js +372 -0
- package/node_modules/pino-std-serializers/.editorconfig +13 -0
- package/node_modules/pino-std-serializers/.github/dependabot.yml +13 -0
- package/node_modules/pino-std-serializers/.github/workflows/ci.yml +81 -0
- package/node_modules/pino-std-serializers/LICENSE +7 -0
- package/node_modules/pino-std-serializers/Readme.md +182 -0
- package/node_modules/pino-std-serializers/eslint.config.js +7 -0
- package/node_modules/pino-std-serializers/index.d.ts +145 -0
- package/node_modules/pino-std-serializers/index.js +36 -0
- package/node_modules/pino-std-serializers/lib/err-helpers.js +118 -0
- package/node_modules/pino-std-serializers/lib/err-proto.js +48 -0
- package/node_modules/pino-std-serializers/lib/err-with-cause.js +48 -0
- package/node_modules/pino-std-serializers/lib/err.js +45 -0
- package/node_modules/pino-std-serializers/lib/req.js +100 -0
- package/node_modules/pino-std-serializers/lib/res.js +47 -0
- package/node_modules/pino-std-serializers/package.json +42 -0
- package/node_modules/pino-std-serializers/test/err-with-cause.test.js +187 -0
- package/node_modules/pino-std-serializers/test/err.test.js +200 -0
- package/node_modules/pino-std-serializers/test/req.test.js +477 -0
- package/node_modules/pino-std-serializers/test/res.test.js +120 -0
- package/node_modules/pino-std-serializers/test/types/index.test-d.ts +71 -0
- package/node_modules/pino-std-serializers/tsconfig.json +13 -0
- package/node_modules/process-warning/.gitattributes +2 -0
- package/node_modules/process-warning/.github/dependabot.yml +13 -0
- package/node_modules/process-warning/.github/workflows/ci.yml +22 -0
- package/node_modules/process-warning/LICENSE +21 -0
- package/node_modules/process-warning/README.md +118 -0
- package/node_modules/process-warning/benchmarks/warn.js +25 -0
- package/node_modules/process-warning/eslint.config.js +6 -0
- package/node_modules/process-warning/examples/example.js +11 -0
- package/node_modules/process-warning/index.js +124 -0
- package/node_modules/process-warning/package.json +73 -0
- package/node_modules/process-warning/test/emit-interpolated-string.test.js +34 -0
- package/node_modules/process-warning/test/emit-once-only.test.js +33 -0
- package/node_modules/process-warning/test/emit-reset.test.js +40 -0
- package/node_modules/process-warning/test/emit-set.test.js +35 -0
- package/node_modules/process-warning/test/emit-unlimited.test.js +42 -0
- package/node_modules/process-warning/test/index.test.js +99 -0
- package/node_modules/process-warning/test/issue-88.test.js +38 -0
- package/node_modules/process-warning/test/jest.test.js +24 -0
- package/node_modules/process-warning/test/no-warnings.test.js +80 -0
- package/node_modules/process-warning/test/promise.js +10 -0
- package/node_modules/process-warning/types/index.d.ts +37 -0
- package/node_modules/process-warning/types/index.test-d.ts +36 -0
- package/node_modules/quick-format-unescaped/.github/workflows/ci.yml +21 -0
- package/node_modules/quick-format-unescaped/LICENSE +21 -0
- package/node_modules/quick-format-unescaped/benchmark.js +24 -0
- package/node_modules/quick-format-unescaped/index.js +109 -0
- package/node_modules/quick-format-unescaped/package.json +29 -0
- package/node_modules/quick-format-unescaped/readme.md +66 -0
- package/node_modules/quick-format-unescaped/test/index.js +136 -0
- package/node_modules/real-require/LICENSE.md +21 -0
- package/node_modules/real-require/README.md +51 -0
- package/node_modules/real-require/package.json +49 -0
- package/node_modules/real-require/src/index.js +14 -0
- package/node_modules/safe-stable-stringify/LICENSE +21 -0
- package/node_modules/safe-stable-stringify/esm/package.json +4 -0
- package/node_modules/safe-stable-stringify/esm/wrapper.d.ts +4 -0
- package/node_modules/safe-stable-stringify/esm/wrapper.js +6 -0
- package/node_modules/safe-stable-stringify/index.d.ts +22 -0
- package/node_modules/safe-stable-stringify/index.js +612 -0
- package/node_modules/safe-stable-stringify/package.json +65 -0
- package/node_modules/safe-stable-stringify/readme.md +177 -0
- package/node_modules/sonic-boom/.eslintignore +2 -0
- package/node_modules/sonic-boom/.taprc +3 -0
- package/node_modules/sonic-boom/LICENSE +21 -0
- package/node_modules/sonic-boom/README.md +153 -0
- package/node_modules/sonic-boom/bench.js +98 -0
- package/node_modules/sonic-boom/check.js +18 -0
- package/node_modules/sonic-boom/example.js +8 -0
- package/node_modules/sonic-boom/fixtures/firehose.js +22 -0
- package/node_modules/sonic-boom/index.js +733 -0
- package/node_modules/sonic-boom/package.json +52 -0
- package/node_modules/sonic-boom/test/destroy.test.js +49 -0
- package/node_modules/sonic-boom/test/end.test.js +98 -0
- package/node_modules/sonic-boom/test/flush-sync.test.js +140 -0
- package/node_modules/sonic-boom/test/flush.test.js +419 -0
- package/node_modules/sonic-boom/test/fsync.test.js +63 -0
- package/node_modules/sonic-boom/test/helper.js +42 -0
- package/node_modules/sonic-boom/test/minlength.test.js +35 -0
- package/node_modules/sonic-boom/test/mode.test.js +116 -0
- package/node_modules/sonic-boom/test/periodicflush.test.js +61 -0
- package/node_modules/sonic-boom/test/reopen.test.js +239 -0
- package/node_modules/sonic-boom/test/retry.test.js +414 -0
- package/node_modules/sonic-boom/test/sync.test.js +261 -0
- package/node_modules/sonic-boom/test/write.test.js +515 -0
- package/node_modules/sonic-boom/types/index.d.ts +63 -0
- package/node_modules/sonic-boom/types/tests/test.ts +4 -0
- package/node_modules/split2/LICENSE +13 -0
- package/node_modules/split2/README.md +85 -0
- package/node_modules/split2/bench.js +27 -0
- package/node_modules/split2/index.js +141 -0
- package/node_modules/split2/package.json +39 -0
- package/node_modules/split2/test.js +409 -0
- package/node_modules/thread-stream/.github/dependabot.yml +13 -0
- package/node_modules/thread-stream/.github/workflows/ci.yml +74 -0
- package/node_modules/thread-stream/.husky/pre-commit +4 -0
- package/node_modules/thread-stream/CLAUDE.md +53 -0
- package/node_modules/thread-stream/LICENSE +21 -0
- package/node_modules/thread-stream/README.md +135 -0
- package/node_modules/thread-stream/bench.js +85 -0
- package/node_modules/thread-stream/eslint.config.js +10 -0
- package/node_modules/thread-stream/index.d.ts +92 -0
- package/node_modules/thread-stream/index.js +541 -0
- package/node_modules/thread-stream/lib/indexes.js +9 -0
- package/node_modules/thread-stream/lib/wait.js +68 -0
- package/node_modules/thread-stream/lib/worker.js +179 -0
- package/node_modules/thread-stream/package.json +52 -0
- package/node_modules/thread-stream/test/base.test.js +259 -0
- package/node_modules/thread-stream/test/bench.test.js +38 -0
- package/node_modules/thread-stream/test/bundlers.test.js +59 -0
- package/node_modules/thread-stream/test/close-on-gc.js +37 -0
- package/node_modules/thread-stream/test/commonjs-fallback.test.js +75 -0
- package/node_modules/thread-stream/test/context.test.js +21 -0
- package/node_modules/thread-stream/test/create-and-exit.js +16 -0
- package/node_modules/thread-stream/test/custom-worker.js +9 -0
- package/node_modules/thread-stream/test/dir with spaces/test-package.zip +0 -0
- package/node_modules/thread-stream/test/emit-event.js +22 -0
- package/node_modules/thread-stream/test/end.test.js +56 -0
- package/node_modules/thread-stream/test/error.js +14 -0
- package/node_modules/thread-stream/test/esm.test.mjs +46 -0
- package/node_modules/thread-stream/test/event.test.js +24 -0
- package/node_modules/thread-stream/test/exit.js +14 -0
- package/node_modules/thread-stream/test/get-context.js +22 -0
- package/node_modules/thread-stream/test/helper.d.ts +1 -0
- package/node_modules/thread-stream/test/helper.js +26 -0
- package/node_modules/thread-stream/test/indexes.test.js +11 -0
- package/node_modules/thread-stream/test/multibyte-chars.test.mjs +75 -0
- package/node_modules/thread-stream/test/on-message.js +18 -0
- package/node_modules/thread-stream/test/pkg/index.js +37 -0
- package/node_modules/thread-stream/test/pkg/pkg.config.json +14 -0
- package/node_modules/thread-stream/test/pkg/pkg.test.js +45 -0
- package/node_modules/thread-stream/test/port.js +16 -0
- package/node_modules/thread-stream/test/post-message.test.js +23 -0
- package/node_modules/thread-stream/test/string-limit-2.test.js +35 -0
- package/node_modules/thread-stream/test/string-limit.test.js +37 -0
- package/node_modules/thread-stream/test/syntax-error.mjs +2 -0
- package/node_modules/thread-stream/test/thread-management.test.js +138 -0
- package/node_modules/thread-stream/test/to-file-on-destroy.js +23 -0
- package/node_modules/thread-stream/test/to-file-on-final.js +24 -0
- package/node_modules/thread-stream/test/to-file.js +12 -0
- package/node_modules/thread-stream/test/to-file.mjs +8 -0
- package/node_modules/thread-stream/test/to-next.js +9 -0
- package/node_modules/thread-stream/test/transpiled.test.js +29 -0
- package/node_modules/thread-stream/test/ts/to-file.ts +10 -0
- package/node_modules/thread-stream/test/ts/transpile.sh +19 -0
- package/node_modules/thread-stream/test/ts-commonjs-default-export.zip +0 -0
- package/node_modules/thread-stream/test/ts-native.test.mjs +35 -0
- package/node_modules/thread-stream/test/ts-node-fallback.test.js +35 -0
- package/node_modules/thread-stream/test/uncaughtException.js +21 -0
- package/node_modules/thread-stream/test/unhandledRejection.js +21 -0
- package/node_modules/thread-stream/test/yarnrc.yml +7 -0
- package/node_modules/thread-stream/tsconfig.json +8 -0
- package/oclif.manifest.json +6 -7
- package/package.json +11 -3
- package/node_modules/@contrail/loader/lib/index.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../node_modules/@contrail/entity-types/lib/action-definition-config.js","../node_modules/@contrail/entity-types/lib/app.js","../node_modules/@contrail/entity-types/lib/app-access-grant.js","../node_modules/@contrail/entity-types/lib/app-api-key.js","../node_modules/@contrail/entity-types/lib/app-code-package.js","../node_modules/@contrail/entity-types/lib/app-extension.js","../node_modules/@contrail/entity-types/lib/app-extension-definition.js","../node_modules/@contrail/entity-types/lib/app-org.js","../node_modules/@contrail/entity-types/lib/app-version.js","../node_modules/@contrail/entity-types/lib/asset.js","../node_modules/@contrail/entity-types/lib/assortment.js","../node_modules/@contrail/entity-types/lib/assortment-item.js","../node_modules/@contrail/entity-types/lib/assortment-publish-change.js","../node_modules/@contrail/entity-types/lib/assortment-summary.js","../node_modules/@contrail/entity-types/lib/base-managed-entity.js","../node_modules/@contrail/entity-types/lib/batch-fetch-response.js","../node_modules/@contrail/entity-types/lib/client.js","../node_modules/@contrail/entity-types/lib/color.js","../node_modules/@contrail/entity-types/lib/composite-plans-summary.js","../node_modules/@contrail/entity-types/lib/content.js","../node_modules/@contrail/entity-types/lib/contentholder-content.js","../node_modules/@contrail/entity-types/lib/event-workflow-action-definition.js","../node_modules/@contrail/entity-types/lib/event-workflow-process.js","../node_modules/@contrail/entity-types/lib/event-workflow-task.js","../node_modules/@contrail/entity-types/lib/file.js","../node_modules/@contrail/entity-types/lib/item.js","../node_modules/@contrail/entity-types/lib/loader.js","../node_modules/@contrail/entity-types/lib/log-level.js","../node_modules/@contrail/entity-types/lib/org.js","../node_modules/@contrail/entity-types/lib/org-managed-entity.js","../node_modules/@contrail/entity-types/lib/project.js","../node_modules/@contrail/entity-types/lib/project-item.js","../node_modules/@contrail/entity-types/lib/property-type.js","../node_modules/@contrail/entity-types/lib/shared-links.js","../node_modules/@contrail/entity-types/lib/subscription.js","../node_modules/@contrail/entity-types/lib/type-managed-entity.js","../node_modules/@contrail/entity-types/lib/user.js","../node_modules/@contrail/entity-types/lib/workspace.js","../node_modules/@contrail/entity-types/lib/workspace-managed-entity.js","../node_modules/@contrail/entity-types/lib/workspace-principal.js","../node_modules/@contrail/entity-types/lib/index.js","../node_modules/@contrail/util/lib/app-util/app-util.js","../node_modules/fflate/lib/node.cjs","../node_modules/@contrail/util/lib/compression-util/compression.js","../node_modules/@contrail/util/lib/compression-util/index.js","../node_modules/@contrail/util/lib/date-util/getIsoDatePart/getIsoDatePart.js","../node_modules/@contrail/util/lib/date-util/date-util.js","../node_modules/@contrail/util/lib/string-util/string-util.js","../node_modules/@contrail/util/lib/map-util/map-util.js","../node_modules/@contrail/util/lib/object-util/cloneDeep/cloneDeep.js","../node_modules/@contrail/util/lib/object-util/isObject/isObject.js","../node_modules/@contrail/util/lib/object-util/mergeDeep/mergeDeep.js","../node_modules/@contrail/util/lib/object-util/compareDeep/compareDeep.js","../node_modules/@contrail/types/lib/type-properties/property-types.js","../node_modules/@contrail/types/lib/type-properties/type-property.js","../node_modules/@contrail/types/lib/type-properties/size-range/size-range.js","../node_modules/@contrail/types/lib/type-properties/index.js","../node_modules/@contrail/types/lib/formatter/formatNumber.js","../node_modules/@contrail/types/lib/formatter/formatSizeRange.js","../node_modules/@contrail/types/lib/formatter/property-value-formatter.js","../node_modules/@contrail/types/lib/formatter/index.js","../node_modules/@contrail/types/lib/type-property-policies/type-property-policy.js","../node_modules/@contrail/types/lib/type-property-policies/index.js","../node_modules/@contrail/types/lib/types/type.js","../node_modules/@contrail/types/lib/types/index.js","../node_modules/@contrail/types/lib/type-interfaces/type-interface.js","../node_modules/@contrail/types/lib/type-interfaces/index.js","../node_modules/@contrail/types/lib/type-roots/type-root.js","../node_modules/@contrail/types/lib/type-roots/index.js","../node_modules/@contrail/types/lib/types-processor/interfaces.js","../node_modules/@contrail/types/lib/types-processor/parse-optionSet.js","../node_modules/@contrail/types/lib/types-processor/type-creation-helper.js","../node_modules/@contrail/types/lib/types-processor/process-orchestrator.js","../node_modules/@contrail/types/lib/types-processor/index.js","../node_modules/@contrail/types/lib/type-option-set-hierarchies/option-set-hierarchy.js","../node_modules/@contrail/types/lib/type-option-set-hierarchies/option-set-hierarchy-helper.js","../node_modules/@contrail/types/lib/type-option-set-hierarchies/index.js","../node_modules/@contrail/types/lib/type-rule-sets/type-rules.js","../node_modules/@contrail/types/lib/type-rule-sets/index.js","../node_modules/@contrail/types/lib/type-policies/type-policy.js","../node_modules/@contrail/types/lib/type-policies/index.js","../node_modules/@contrail/types/lib/copy/copy-helper.js","../node_modules/@contrail/types/lib/copy/index.js","../node_modules/@contrail/types/lib/index.js","../node_modules/@contrail/util/lib/object-util/applyChangesIfEqual/applyChangesIfEqual.js","../node_modules/@contrail/util/lib/object-util/object-util.js","../node_modules/@contrail/util/lib/order-util/order-util.js","../node_modules/@contrail/util/lib/promise-util/promise-util.js","../node_modules/@contrail/util/lib/retry-util/retry-util.js","../node_modules/@contrail/util/lib/timer-util/timer-util.js","../node_modules/@contrail/util/lib/index.js","../node_modules/@contrail/entity-compare/lib/entity-compare/entity-compare.client.js","../node_modules/@contrail/entity-compare/lib/entity-compare/index.js","../node_modules/@contrail/entity-compare/lib/index.js","../src/index.ts","../src/file-preprocessor.ts","../src/common/csv-file-helper.ts","../src/common/conditional-columns.ts","../src/common/entities-helper.ts","../src/common/data-transformer-functions.ts","../src/common/file-helper.ts","../src/processor-registry.ts","../src/color-processor.ts","../src/base-processor.ts","../src/common/entity-builder-helpers.ts","../src/entity-processor.ts","../src/common/type-helper.ts","../src/common/util.ts","../src/constants.ts","../src/custom-entity-processor.ts","../src/entities-v2/linesheet-v2/assortment-processor.ts","../src/entities-v2/linesheet-v2/item-helper.ts","../src/entities-v2/base-processor-v2.ts","../src/entities-v2/linesheet-v2/partial-assortment-processor.ts","../src/entities-v2/linesheet-v2/item-processor.ts","../src/common/size-range-helpers.ts","../src/entities-v2/entity-processor-v2.ts","../src/entities-v2/linesheet-v2/project-item-processor.ts","../src/entities-v2/custom-entities-v2/custom-entity-processor-v2.ts","../src/entities-v2/colors-v2/color-processor-v2.ts","../src/entities-v2/file-preprocessor-v2.ts","../src/pipeline/types.ts","../src/entities-v2/entities-helper.ts","../src/pipeline/fetch-type-definitions.ts","../src/pipeline/analyze-columns.ts","../src/pipeline/preprocess.ts","../src/pipeline/coerce-values-by-type.ts","../src/pipeline/validate.ts","../src/pipeline/preview.ts","../src/pipeline/item-execute-helpers.ts","../src/pipeline/project-item-execute-helpers.ts","../src/pipeline/execute.ts","../src/pipeline/loader-pipeline.ts"],"sourcesContent":["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.AppAccessGrantScope = void 0;\nvar AppAccessGrantScope;\n(function (AppAccessGrantScope) {\n AppAccessGrantScope[\"INSTALL\"] = \"INSTALL\";\n})(AppAccessGrantScope = exports.AppAccessGrantScope || (exports.AppAccessGrantScope = {}));\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.AppExtensionUserApps = exports.AppExtensionType = void 0;\nvar AppExtensionType;\n(function (AppExtensionType) {\n AppExtensionType[\"DOCUMENT_AUTOMATION\"] = \"DOCUMENT_AUTOMATION\";\n AppExtensionType[\"CONTEXTUAL_ACTION\"] = \"CONTEXTUAL_ACTION\";\n AppExtensionType[\"CONTEXTUAL_INFORMATION_WIDGET\"] = \"CONTEXTUAL_INFORMATION_WIDGET\";\n AppExtensionType[\"ADMIN_UTILITY\"] = \"ADMIN_UTILITY\";\n})(AppExtensionType = exports.AppExtensionType || (exports.AppExtensionType = {}));\nvar AppExtensionUserApps;\n(function (AppExtensionUserApps) {\n AppExtensionUserApps[\"BOARDS\"] = \"BOARDS\";\n AppExtensionUserApps[\"SHOWCASE\"] = \"SHOWCASE\";\n AppExtensionUserApps[\"PLAN\"] = \"PLAN\";\n AppExtensionUserApps[\"ADMIN_CONSOLE\"] = \"ADMIN_CONSOLE\";\n AppExtensionUserApps[\"ALL\"] = \"ALL\";\n})(AppExtensionUserApps = exports.AppExtensionUserApps || (exports.AppExtensionUserApps = {}));\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.AppOrgStatus = void 0;\nvar AppOrgStatus;\n(function (AppOrgStatus) {\n AppOrgStatus[\"INSTALLING\"] = \"INSTALLING\";\n AppOrgStatus[\"FAILED_INSTALLING\"] = \"FAILED_INSTALLING\";\n AppOrgStatus[\"READY\"] = \"READY\";\n AppOrgStatus[\"DELETING\"] = \"DELETING\";\n AppOrgStatus[\"FAILED_DELETING\"] = \"FAILED_DELETING\";\n})(AppOrgStatus = exports.AppOrgStatus || (exports.AppOrgStatus = {}));\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isValidNodeRuntime = exports.NodeRuntime = exports.AppVersionStatus = void 0;\nvar AppVersionStatus;\n(function (AppVersionStatus) {\n AppVersionStatus[\"PUBLISHING\"] = \"PUBLISHING\";\n AppVersionStatus[\"FAILED_PUBLISHING\"] = \"FAILED_PUBLISHING\";\n AppVersionStatus[\"PUBLISHED\"] = \"PUBLISHED\";\n AppVersionStatus[\"ARCHIVING\"] = \"ARCHIVING\";\n AppVersionStatus[\"FAILED_ARCHIVING\"] = \"FAILED_ARCHIVING\";\n AppVersionStatus[\"ARCHIVED\"] = \"ARCHIVED\";\n})(AppVersionStatus = exports.AppVersionStatus || (exports.AppVersionStatus = {}));\nvar NodeRuntime;\n(function (NodeRuntime) {\n NodeRuntime[\"NODEJS_18_X\"] = \"nodejs18.x\";\n NodeRuntime[\"NODEJS_22_X\"] = \"nodejs22.x\";\n})(NodeRuntime = exports.NodeRuntime || (exports.NodeRuntime = {}));\nfunction isValidNodeRuntime(runtime) {\n return Object.values(NodeRuntime).includes(runtime);\n}\nexports.isValidNodeRuntime = isValidNodeRuntime;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.AssortmentType = void 0;\nvar AssortmentType;\n(function (AssortmentType) {\n AssortmentType[\"PLAN\"] = \"PLAN\";\n AssortmentType[\"BACKING\"] = \"BACKING\";\n AssortmentType[\"SHOWCASE\"] = \"SHOWCASE\";\n AssortmentType[\"INTEGRATION\"] = \"INTEGRATION\";\n AssortmentType[\"ASSORTMENT\"] = \"ASSORTMENT\";\n})(AssortmentType = exports.AssortmentType || (exports.AssortmentType = {}));\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.EntitiesClient = exports.EntitiesClientBatchDeleteOptions = exports.EntitiesClientDeleteOptions = exports.EntitiesClientBatchUpdateOptions = exports.EntitiesClientUpdateOptions = exports.EntitiesClientBatchCreateOptions = exports.EntitiesClientCreateOptions = exports.EntitiesClientGetOptions = exports.DEFAULT_API_VERSION = exports.API_VERSION = exports.SortOrderOptions = exports.EntityReference = exports.ApiError = exports.TimeoutError = exports.InvalidPolicyError = void 0;\nclass InvalidPolicyError extends Error {\n}\nexports.InvalidPolicyError = InvalidPolicyError;\nclass TimeoutError extends Error {\n}\nexports.TimeoutError = TimeoutError;\nclass ApiError extends Error {\n details;\n constructor(message, details) {\n super(message);\n this.details = details;\n this.details = details;\n }\n}\nexports.ApiError = ApiError;\nclass EntityReference {\n id;\n entityType;\n reference;\n}\nexports.EntityReference = EntityReference;\nvar SortOrderOptions;\n(function (SortOrderOptions) {\n SortOrderOptions[\"ASC\"] = \"asc\";\n SortOrderOptions[\"DESC\"] = \"desc\";\n})(SortOrderOptions = exports.SortOrderOptions || (exports.SortOrderOptions = {}));\nvar API_VERSION;\n(function (API_VERSION) {\n API_VERSION[\"EMPTY\"] = \"\";\n API_VERSION[\"V1\"] = \"1\";\n API_VERSION[\"V2\"] = \"2\";\n})(API_VERSION = exports.API_VERSION || (exports.API_VERSION = {}));\nexports.DEFAULT_API_VERSION = API_VERSION.EMPTY;\nclass EntitiesClientGetOptions {\n entityName;\n id;\n reference;\n federatedId;\n federatedIds;\n relation;\n relations;\n criteria;\n cacheMode;\n search;\n useSearch;\n order;\n skip;\n take;\n paginate;\n nextPageKey;\n apiVersion;\n suffix;\n skipHydrateRelationships;\n}\nexports.EntitiesClientGetOptions = EntitiesClientGetOptions;\nclass EntitiesClientCreateOptions {\n entityName;\n object;\n id;\n relation;\n apiVersion;\n suffix;\n skipHydrateRelationships;\n}\nexports.EntitiesClientCreateOptions = EntitiesClientCreateOptions;\nclass EntitiesClientBatchCreateOptions {\n entityName;\n objects;\n apiVersion;\n suffix;\n}\nexports.EntitiesClientBatchCreateOptions = EntitiesClientBatchCreateOptions;\nclass EntitiesClientUpdateOptions {\n entityName;\n object;\n id;\n reference;\n relation;\n relationId;\n apiVersion;\n suffix;\n skipHydrateRelationships;\n}\nexports.EntitiesClientUpdateOptions = EntitiesClientUpdateOptions;\nclass EntitiesClientBatchUpdateOptions {\n entityName;\n objects;\n apiVersion;\n suffix;\n}\nexports.EntitiesClientBatchUpdateOptions = EntitiesClientBatchUpdateOptions;\nclass EntitiesClientDeleteOptions {\n entityName;\n id;\n reference;\n relation;\n relationId;\n apiVersion;\n suffix;\n}\nexports.EntitiesClientDeleteOptions = EntitiesClientDeleteOptions;\nclass EntitiesClientBatchDeleteOptions {\n entityName;\n ids;\n apiVersion;\n suffix;\n}\nexports.EntitiesClientBatchDeleteOptions = EntitiesClientBatchDeleteOptions;\nclass EntitiesClient {\n}\nexports.EntitiesClient = EntitiesClient;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.EventWorkflowStatus = void 0;\nvar EventWorkflowStatus;\n(function (EventWorkflowStatus) {\n EventWorkflowStatus[\"ACTIVE\"] = \"ACTIVE\";\n EventWorkflowStatus[\"PENDING\"] = \"PENDING\";\n EventWorkflowStatus[\"AWAITING\"] = \"AWAITING\";\n EventWorkflowStatus[\"FAILED\"] = \"FAILED\";\n EventWorkflowStatus[\"COMPLETE\"] = \"COMPLETE\";\n})(EventWorkflowStatus = exports.EventWorkflowStatus || (exports.EventWorkflowStatus = {}));\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SuggestedFixType = exports.PreValidationSeverity = exports.PreValidationCategory = exports.EntityType = exports.LoaderFailureArea = exports.IssueType = exports.LoadType = exports.LoadStatus = exports.ValueToAssortment = exports.AssortmentSplit = exports.ConditionalValues = exports.ColumnDefinition = void 0;\nclass ColumnDefinition {\n fromProperty;\n toProperty;\n conditions;\n default;\n}\nexports.ColumnDefinition = ColumnDefinition;\nclass ConditionalValues {\n conditional;\n value;\n}\nexports.ConditionalValues = ConditionalValues;\nclass AssortmentSplit {\n partialAssortmentUpdate;\n dropField;\n fieldToSplitOn;\n values;\n}\nexports.AssortmentSplit = AssortmentSplit;\nclass ValueToAssortment {\n value;\n assortmentId;\n assortmentIdentifier;\n}\nexports.ValueToAssortment = ValueToAssortment;\nvar LoadStatus;\n(function (LoadStatus) {\n LoadStatus[\"ACTIVE\"] = \"ACTIVE\";\n LoadStatus[\"PENDING\"] = \"PENDING\";\n LoadStatus[\"FAILED\"] = \"FAILED\";\n LoadStatus[\"COMPLETE\"] = \"COMPLETE\";\n LoadStatus[\"CANCELED\"] = \"CANCELED\";\n})(LoadStatus = exports.LoadStatus || (exports.LoadStatus = {}));\nvar LoadType;\n(function (LoadType) {\n LoadType[\"ITEM\"] = \"ITEM\";\n LoadType[\"PROJECT_ITEM\"] = \"PROJECT_ITEM\";\n LoadType[\"ASSORTMENT\"] = \"ASSORTMENT\";\n LoadType[\"COLOR\"] = \"COLOR\";\n LoadType[\"CUSTOM_ENTITY\"] = \"CUSTOM_ENTITY\";\n LoadType[\"SIZE_RANGE_TEMPLATE\"] = \"SIZE_RANGE_TEMPLATE\";\n LoadType[\"PROJECT\"] = \"PROJECT\";\n})(LoadType = exports.LoadType || (exports.LoadType = {}));\nvar IssueType;\n(function (IssueType) {\n IssueType[\"CONFIG\"] = \"CONFIG\";\n IssueType[\"INVALID_DATA\"] = \"INVALID_DATA\";\n IssueType[\"MISSING_DATA\"] = \"MISSING_DATA\";\n IssueType[\"DUPLICATE_FEDERATED_ID\"] = \"DUPLICATE_FEDERATED_ID\";\n IssueType[\"SYSTEM_ERROR\"] = \"SYSTEM_ERROR\";\n IssueType[\"HEADER_MISMATCH\"] = \"HEADER_MISMATCH\";\n IssueType[\"VALIDATION_ERROR\"] = \"VALIDATION_ERROR\";\n IssueType[\"PERMISSION_DENIED\"] = \"PERMISSION_DENIED\";\n IssueType[\"UNKNOWN_ERROR\"] = \"UNKNOWN_ERROR\";\n})(IssueType = exports.IssueType || (exports.IssueType = {}));\nvar LoaderFailureArea;\n(function (LoaderFailureArea) {\n LoaderFailureArea[\"PARSING_CSV\"] = \"PARSING_CSV\";\n LoaderFailureArea[\"TRANSFORMING_DATA\"] = \"TRANSFORMING_DATA\";\n LoaderFailureArea[\"UPLOADING_DATA\"] = \"UPLOADING_DATA\";\n LoaderFailureArea[\"VALIDATING_DATA\"] = \"VALIDATING_DATA\";\n LoaderFailureArea[\"NONE\"] = \"NONE\";\n})(LoaderFailureArea = exports.LoaderFailureArea || (exports.LoaderFailureArea = {}));\nvar EntityType;\n(function (EntityType) {\n EntityType[\"COLOR\"] = \"color\";\n EntityType[\"CUSTOM_ENTITY\"] = \"custom-entity\";\n EntityType[\"ITEM\"] = \"item\";\n EntityType[\"PROJECT_ITEM\"] = \"project-item\";\n EntityType[\"ASSORTMENT\"] = \"assortment-item\";\n})(EntityType = exports.EntityType || (exports.EntityType = {}));\nvar PreValidationCategory;\n(function (PreValidationCategory) {\n PreValidationCategory[\"OPTION_SET\"] = \"OPTION_SET\";\n PreValidationCategory[\"FORMAT_BOOLEAN\"] = \"FORMAT_BOOLEAN\";\n PreValidationCategory[\"FORMAT_MULTI_SELECT\"] = \"FORMAT_MULTI_SELECT\";\n PreValidationCategory[\"CONFIG\"] = \"CONFIG\";\n PreValidationCategory[\"MISSING_REQUIRED_FIELD\"] = \"MISSING_REQUIRED_FIELD\";\n PreValidationCategory[\"REFERENCE_DATA_NOT_FOUND\"] = \"REFERENCE_DATA_NOT_FOUND\";\n PreValidationCategory[\"FAMILY_PROPERTY_VALUES_INCONSISTENT\"] = \"FAMILY_PROPERTY_VALUES_INCONSISTENT\";\n})(PreValidationCategory = exports.PreValidationCategory || (exports.PreValidationCategory = {}));\nvar PreValidationSeverity;\n(function (PreValidationSeverity) {\n PreValidationSeverity[\"ERROR\"] = \"error\";\n PreValidationSeverity[\"WARNING\"] = \"warning\";\n PreValidationSeverity[\"INFO\"] = \"info\";\n})(PreValidationSeverity = exports.PreValidationSeverity || (exports.PreValidationSeverity = {}));\nvar SuggestedFixType;\n(function (SuggestedFixType) {\n SuggestedFixType[\"ADD_OPTION_SET_VALUES\"] = \"add-option-set-values\";\n SuggestedFixType[\"REPLACE_VALUES\"] = \"replace-values\";\n SuggestedFixType[\"CHANGE_SEPARATOR\"] = \"change-separator\";\n})(SuggestedFixType = exports.SuggestedFixType || (exports.SuggestedFixType = {}));\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.LogLevel = void 0;\nvar LogLevel;\n(function (LogLevel) {\n LogLevel[LogLevel[\"FATAL\"] = 0] = \"FATAL\";\n LogLevel[LogLevel[\"ERROR\"] = 1] = \"ERROR\";\n LogLevel[LogLevel[\"WARN\"] = 2] = \"WARN\";\n LogLevel[LogLevel[\"INFO\"] = 3] = \"INFO\";\n LogLevel[LogLevel[\"LOG\"] = 4] = \"LOG\";\n LogLevel[LogLevel[\"DEBUG\"] = 5] = \"DEBUG\";\n})(LogLevel = exports.LogLevel || (exports.LogLevel = {}));\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.PropertyType = void 0;\nvar PropertyType;\n(function (PropertyType) {\n PropertyType[\"Boolean\"] = \"boolean\";\n PropertyType[\"CascadingSelect\"] = \"cascading_select\";\n PropertyType[\"Composite\"] = \"composite\";\n PropertyType[\"Constant\"] = \"constant\";\n PropertyType[\"Currency\"] = \"currency\";\n PropertyType[\"DataGrid\"] = \"data_grid\";\n PropertyType[\"Date\"] = \"date\";\n PropertyType[\"Formula\"] = \"formula\";\n PropertyType[\"Image\"] = \"image\";\n PropertyType[\"Json\"] = \"json\";\n PropertyType[\"MultiSelect\"] = \"multi_select\";\n PropertyType[\"Number\"] = \"number\";\n PropertyType[\"ObjectReference\"] = \"object_reference\";\n PropertyType[\"ObjectReferenceList\"] = \"object_ref_list\";\n PropertyType[\"Password\"] = \"password\";\n PropertyType[\"Percent\"] = \"percent\";\n PropertyType[\"Rating\"] = \"rating\";\n PropertyType[\"Sequence\"] = \"sequence\";\n PropertyType[\"SingleSelect\"] = \"choice\";\n PropertyType[\"SizeRange\"] = \"size_range\";\n PropertyType[\"String\"] = \"string\";\n PropertyType[\"Text\"] = \"text\";\n PropertyType[\"TypeReference\"] = \"type_reference\";\n PropertyType[\"Url\"] = \"url\";\n PropertyType[\"UserList\"] = \"userList\";\n})(PropertyType = exports.PropertyType || (exports.PropertyType = {}));\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SharedLinkAccessLevel = void 0;\nvar SharedLinkAccessLevel;\n(function (SharedLinkAccessLevel) {\n SharedLinkAccessLevel[\"RESTRICTED\"] = \"RESTRICTED\";\n SharedLinkAccessLevel[\"VIEW\"] = \"VIEW\";\n SharedLinkAccessLevel[\"COMMENT\"] = \"COMMENT\";\n SharedLinkAccessLevel[\"EDIT\"] = \"EDIT\";\n SharedLinkAccessLevel[\"MANAGE\"] = \"MANAGE\";\n})(SharedLinkAccessLevel = exports.SharedLinkAccessLevel || (exports.SharedLinkAccessLevel = {}));\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.BOARD_APP_SUBSCRIBED_TO_CONST = exports.PLAN_APP_SUBSCRIBED_TO_CONST = exports.SHOWCASE_APP_SUBSCRIBED_TO_CONST = exports.SubscriptionChannel = exports.SubscriptionType = void 0;\nvar SubscriptionType;\n(function (SubscriptionType) {\n SubscriptionType[\"COMMENT_ON_OWNED\"] = \"COMMENT_ON_OWNED\";\n SubscriptionType[\"COMMENT\"] = \"COMMENT\";\n SubscriptionType[\"MENTION\"] = \"MENTION\";\n SubscriptionType[\"REPLY\"] = \"REPLY\";\n SubscriptionType[\"FAILURE\"] = \"FAILURE\";\n SubscriptionType[\"DELETE\"] = \"DELETE\";\n SubscriptionType[\"SUCCESS\"] = \"SUCCESS\";\n})(SubscriptionType = exports.SubscriptionType || (exports.SubscriptionType = {}));\nvar SubscriptionChannel;\n(function (SubscriptionChannel) {\n SubscriptionChannel[\"SLACK\"] = \"SLACK\";\n SubscriptionChannel[\"EMAIL\"] = \"EMAIL\";\n SubscriptionChannel[\"TEAMS\"] = \"TEAMS\";\n})(SubscriptionChannel = exports.SubscriptionChannel || (exports.SubscriptionChannel = {}));\nexports.SHOWCASE_APP_SUBSCRIBED_TO_CONST = 'showcase-app';\nexports.PLAN_APP_SUBSCRIBED_TO_CONST = 'plan-app';\nexports.BOARD_APP_SUBSCRIBED_TO_CONST = 'board-app';\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.PlatformRole = exports.SystemRole = exports.UserOrgRole = void 0;\nvar UserOrgRole;\n(function (UserOrgRole) {\n UserOrgRole[\"admin\"] = \"ADMIN\";\n UserOrgRole[\"member\"] = \"MEMBER\";\n UserOrgRole[\"guest\"] = \"GUEST\";\n})(UserOrgRole = exports.UserOrgRole || (exports.UserOrgRole = {}));\nvar SystemRole;\n(function (SystemRole) {\n SystemRole[\"SYSTEM\"] = \"SYSTEM\";\n})(SystemRole = exports.SystemRole || (exports.SystemRole = {}));\nvar PlatformRole;\n(function (PlatformRole) {\n PlatformRole[\"PLATFORM_MANAGER\"] = \"PLATFORM_MANAGER\";\n PlatformRole[\"PLATFORM_OPS\"] = \"PLATFORM_OPS\";\n PlatformRole[\"PLATFORM_USER\"] = \"PLATFORM_USER\";\n PlatformRole[\"PLATFORM_ADMIN\"] = \"PLATFORM_ADMIN\";\n})(PlatformRole = exports.PlatformRole || (exports.PlatformRole = {}));\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.WorkspaceType = void 0;\nvar WorkspaceType;\n(function (WorkspaceType) {\n WorkspaceType[\"project\"] = \"PROJECT\";\n WorkspaceType[\"folder\"] = \"FOLDER\";\n WorkspaceType[\"library\"] = \"LIBRARY\";\n})(WorkspaceType = exports.WorkspaceType || (exports.WorkspaceType = {}));\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.WorkspacePrincipalRole = void 0;\nvar WorkspacePrincipalRole;\n(function (WorkspacePrincipalRole) {\n WorkspacePrincipalRole[\"admin\"] = \"ADMIN\";\n WorkspacePrincipalRole[\"member\"] = \"MEMBER\";\n WorkspacePrincipalRole[\"viewer\"] = \"VIEWER\";\n})(WorkspacePrincipalRole = exports.WorkspacePrincipalRole || (exports.WorkspacePrincipalRole = {}));\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./action-definition-config\"), exports);\n__exportStar(require(\"./app\"), exports);\n__exportStar(require(\"./app-access-grant\"), exports);\n__exportStar(require(\"./app-api-key\"), exports);\n__exportStar(require(\"./app-code-package\"), exports);\n__exportStar(require(\"./app-extension\"), exports);\n__exportStar(require(\"./app-extension-definition\"), exports);\n__exportStar(require(\"./app-org\"), exports);\n__exportStar(require(\"./app-version\"), exports);\n__exportStar(require(\"./asset\"), exports);\n__exportStar(require(\"./assortment\"), exports);\n__exportStar(require(\"./assortment-item\"), exports);\n__exportStar(require(\"./assortment-publish-change\"), exports);\n__exportStar(require(\"./assortment-summary\"), exports);\n__exportStar(require(\"./base-managed-entity\"), exports);\n__exportStar(require(\"./batch-fetch-response\"), exports);\n__exportStar(require(\"./client\"), exports);\n__exportStar(require(\"./color\"), exports);\n__exportStar(require(\"./composite-plans-summary\"), exports);\n__exportStar(require(\"./content\"), exports);\n__exportStar(require(\"./contentholder-content\"), exports);\n__exportStar(require(\"./event-workflow-action-definition\"), exports);\n__exportStar(require(\"./event-workflow-process\"), exports);\n__exportStar(require(\"./event-workflow-task\"), exports);\n__exportStar(require(\"./file\"), exports);\n__exportStar(require(\"./item\"), exports);\n__exportStar(require(\"./loader\"), exports);\n__exportStar(require(\"./log-level\"), exports);\n__exportStar(require(\"./org\"), exports);\n__exportStar(require(\"./org-managed-entity\"), exports);\n__exportStar(require(\"./project\"), exports);\n__exportStar(require(\"./project-item\"), exports);\n__exportStar(require(\"./property-type\"), exports);\n__exportStar(require(\"./shared-links\"), exports);\n__exportStar(require(\"./subscription\"), exports);\n__exportStar(require(\"./type-managed-entity\"), exports);\n__exportStar(require(\"./user\"), exports);\n__exportStar(require(\"./workspace\"), exports);\n__exportStar(require(\"./workspace-managed-entity\"), exports);\n__exportStar(require(\"./workspace-principal\"), exports);\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.AppUtil = exports.BadIdentifierException = exports.EXTENSION_IDENTIFIER_VALIDATION_BAD_CHARACTERS = exports.EXTENSION_IDENTIFIER_VALIDATION_INCORRECT_PATTERN = exports.EXTENSION_IDENTIFIER_VALIDATION_START_WITH_AT = exports.EXTENSION_IDENTIFIER_VALIDATION_NO_IDENTIFIER = exports.ACTION_IDENTIFIER_VALIDATION_BAD_CHARACTERS = exports.ACTION_IDENTIFIER_VALIDATION_INCORRECT_PATTERN = exports.ACTION_IDENTIFIER_VALIDATION_START_WITH_AT = exports.ACTION_IDENTIFIER_VALIDATION_NO_IDENTIFIER = void 0;\nexports.ACTION_IDENTIFIER_VALIDATION_NO_IDENTIFIER = 'Action definition has no identifier. An identifier is required.';\nexports.ACTION_IDENTIFIER_VALIDATION_START_WITH_AT = `Invalid action identifier. Action definition identifier must conform with '@appIdentifier@versionId:actionIdentifier'`;\nexports.ACTION_IDENTIFIER_VALIDATION_INCORRECT_PATTERN = `Invalid action definition identifier. Please use the format: '@appIdentifier@versionId:actionIdentifier'. Action definitions must only contain alphanumeric characters and special characters '/' '-' '_' and conform to the regex ^@([_\\-\\/A-Za-z0-9]+)@([_\\-\\/A-Za-z0-9])+:([_\\-\\/A-Za-z0-9])+`;\nexports.ACTION_IDENTIFIER_VALIDATION_BAD_CHARACTERS = `Invalid action definitions identifier. Please use the format: '@appIdentifier@versionId:actionIdentifier'. 'appIdentifier', 'versionId', and 'actionIdentifier' must only contain alphanumeric characters and special characters '/' '-' '_' and conform to the regex ^@([_\\-\\/A-Za-z0-9]+)@([_\\-\\/A-Za-z0-9])+:([_\\-\\/A-Za-z0-9])+.`;\nexports.EXTENSION_IDENTIFIER_VALIDATION_NO_IDENTIFIER = 'Extension definition has no identifier. An identifier is required.';\nexports.EXTENSION_IDENTIFIER_VALIDATION_START_WITH_AT = `Invalid extension identifier. Extension identifier must conform with '@appIdentifier:extensionIdentifier'`;\nexports.EXTENSION_IDENTIFIER_VALIDATION_INCORRECT_PATTERN = `Invalid extension identifier. Please use the format: '@appIdentifier:extensionIdentifier'. Extension definitions must only contain alphanumeric characters and special characters '/' '-' '_' and conform to the regex ^@([_\\-\\/A-Za-z0-9]+)@([_\\-\\/A-Za-z0-9])+:([_\\-\\/A-Za-z0-9])+`;\nexports.EXTENSION_IDENTIFIER_VALIDATION_BAD_CHARACTERS = `Invalid extension identifier. Please use the format: '@appIdentifier:extensionIdentifier'. 'appIdentifier' and 'extensionIdentifier' must only contain alphanumeric characters and special characters '/' '-' '_' '.' and conform to the regex ^@([_\\.\\-\\/A-Za-z0-9]+)@([_\\.\\-\\/A-Za-z0-9])+:([_\\.\\-\\/A-Za-z0-9])+.`;\nclass BadIdentifierException extends Error {\n}\nexports.BadIdentifierException = BadIdentifierException;\nclass AppUtil {\n static parseActionIdentifier(actionIdentifier) {\n {\n if (!actionIdentifier) {\n throw new BadIdentifierException(exports.ACTION_IDENTIFIER_VALIDATION_NO_IDENTIFIER);\n }\n if (!actionIdentifier.startsWith('@')) {\n throw new BadIdentifierException(exports.ACTION_IDENTIFIER_VALIDATION_START_WITH_AT);\n }\n const identifierParts = actionIdentifier.split(/[@:]/);\n if (identifierParts.length !== 4) {\n throw new BadIdentifierException(exports.ACTION_IDENTIFIER_VALIDATION_INCORRECT_PATTERN);\n }\n for (const appVersionPart of identifierParts.slice(1)) {\n const badCharacters = appVersionPart.match(/[^@_.\\-\\/A-Za-z0-9]/g);\n if (badCharacters === null || badCharacters === void 0 ? void 0 : badCharacters.length) {\n throw new BadIdentifierException(exports.ACTION_IDENTIFIER_VALIDATION_BAD_CHARACTERS);\n }\n }\n return {\n appIdentifier: `@${identifierParts[1]}`,\n versionId: identifierParts[2],\n actionNameIdentifier: identifierParts[3],\n };\n }\n }\n static createActionIdentifier(actionDefinitionParts) {\n return `${actionDefinitionParts.appIdentifier}@${actionDefinitionParts.versionId}:${actionDefinitionParts.actionNameIdentifier}`;\n }\n static parseExtensionIdentifier(extensionIdentifier) {\n {\n if (!extensionIdentifier) {\n throw new BadIdentifierException(exports.EXTENSION_IDENTIFIER_VALIDATION_NO_IDENTIFIER);\n }\n if (!extensionIdentifier.startsWith('@')) {\n throw new BadIdentifierException(exports.EXTENSION_IDENTIFIER_VALIDATION_START_WITH_AT);\n }\n const identifierParts = extensionIdentifier.split(/[@:]/);\n if (identifierParts.length !== 3) {\n throw new BadIdentifierException(exports.EXTENSION_IDENTIFIER_VALIDATION_INCORRECT_PATTERN);\n }\n for (const appVersionPart of identifierParts.slice(1)) {\n const badCharacters = appVersionPart.match(/[^@_.\\-\\/A-Za-z0-9]/g);\n if (badCharacters === null || badCharacters === void 0 ? void 0 : badCharacters.length) {\n throw new BadIdentifierException(exports.EXTENSION_IDENTIFIER_VALIDATION_BAD_CHARACTERS);\n }\n }\n return {\n appIdentifier: `@${identifierParts[1]}`,\n extensionIdentifier: identifierParts[2],\n };\n }\n }\n static createExtensionIdentifier(extensionDefinitionParts) {\n return `${extensionDefinitionParts.appIdentifier}:${extensionDefinitionParts.extensionIdentifier}`;\n }\n}\nexports.AppUtil = AppUtil;\n","\"use strict\";\n// DEFLATE is a complex format; to read this code, you should probably check the RFC first:\n// https://tools.ietf.org/html/rfc1951\n// You may also wish to take a look at the guide I made about this program:\n// https://gist.github.com/101arrowz/253f31eb5abc3d9275ab943003ffecad\n// Some of the following code is similar to that of UZIP.js:\n// https://github.com/photopea/UZIP.js\n// However, the vast majority of the codebase has diverged from UZIP.js to increase performance and reduce bundle size.\n// Sometimes 0 will appear where -1 would be more appropriate. This is because using a uint\n// is better for memory in most engines (I *think*).\n// Mediocre shim\nvar Worker;\nvar workerAdd = \";var __w=require('worker_threads');__w.parentPort.on('message',function(m){onmessage({data:m})}),postMessage=function(m,t){__w.parentPort.postMessage(m,t)},close=process.exit;self=global\";\ntry {\n Worker = require('worker_threads').Worker;\n}\ncatch (e) {\n}\nvar node_worker_1 = {};\nnode_worker_1[\"default\"] = Worker ? function (c, _, msg, transfer, cb) {\n var done = false;\n var w = new Worker(c + workerAdd, { eval: true })\n .on('error', function (e) { return cb(e, null); })\n .on('message', function (m) { return cb(null, m); })\n .on('exit', function (c) {\n if (c && !done)\n cb(new Error('exited with code ' + c), null);\n });\n w.postMessage(msg, transfer);\n w.terminate = function () {\n done = true;\n return Worker.prototype.terminate.call(w);\n };\n return w;\n} : function (_, __, ___, ____, cb) {\n setImmediate(function () { return cb(new Error('async operations unsupported - update to Node 12+ (or Node 10-11 with the --experimental-worker CLI flag)'), null); });\n var NOP = function () { };\n return {\n terminate: NOP,\n postMessage: NOP\n };\n};\n\n// aliases for shorter compressed code (most minifers don't do this)\nvar u8 = Uint8Array, u16 = Uint16Array, i32 = Int32Array;\n// fixed length extra bits\nvar fleb = new u8([0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, /* unused */ 0, 0, /* impossible */ 0]);\n// fixed distance extra bits\nvar fdeb = new u8([0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, /* unused */ 0, 0]);\n// code length index map\nvar clim = new u8([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]);\n// get base, reverse index map from extra bits\nvar freb = function (eb, start) {\n var b = new u16(31);\n for (var i = 0; i < 31; ++i) {\n b[i] = start += 1 << eb[i - 1];\n }\n // numbers here are at max 18 bits\n var r = new i32(b[30]);\n for (var i = 1; i < 30; ++i) {\n for (var j = b[i]; j < b[i + 1]; ++j) {\n r[j] = ((j - b[i]) << 5) | i;\n }\n }\n return { b: b, r: r };\n};\nvar _a = freb(fleb, 2), fl = _a.b, revfl = _a.r;\n// we can ignore the fact that the other numbers are wrong; they never happen anyway\nfl[28] = 258, revfl[258] = 28;\nvar _b = freb(fdeb, 0), fd = _b.b, revfd = _b.r;\n// map of value to reverse (assuming 16 bits)\nvar rev = new u16(32768);\nfor (var i = 0; i < 32768; ++i) {\n // reverse table algorithm from SO\n var x = ((i & 0xAAAA) >> 1) | ((i & 0x5555) << 1);\n x = ((x & 0xCCCC) >> 2) | ((x & 0x3333) << 2);\n x = ((x & 0xF0F0) >> 4) | ((x & 0x0F0F) << 4);\n rev[i] = (((x & 0xFF00) >> 8) | ((x & 0x00FF) << 8)) >> 1;\n}\n// create huffman tree from u8 \"map\": index -> code length for code index\n// mb (max bits) must be at most 15\n// TODO: optimize/split up?\nvar hMap = (function (cd, mb, r) {\n var s = cd.length;\n // index\n var i = 0;\n // u16 \"map\": index -> # of codes with bit length = index\n var l = new u16(mb);\n // length of cd must be 288 (total # of codes)\n for (; i < s; ++i) {\n if (cd[i])\n ++l[cd[i] - 1];\n }\n // u16 \"map\": index -> minimum code for bit length = index\n var le = new u16(mb);\n for (i = 1; i < mb; ++i) {\n le[i] = (le[i - 1] + l[i - 1]) << 1;\n }\n var co;\n if (r) {\n // u16 \"map\": index -> number of actual bits, symbol for code\n co = new u16(1 << mb);\n // bits to remove for reverser\n var rvb = 15 - mb;\n for (i = 0; i < s; ++i) {\n // ignore 0 lengths\n if (cd[i]) {\n // num encoding both symbol and bits read\n var sv = (i << 4) | cd[i];\n // free bits\n var r_1 = mb - cd[i];\n // start value\n var v = le[cd[i] - 1]++ << r_1;\n // m is end value\n for (var m = v | ((1 << r_1) - 1); v <= m; ++v) {\n // every 16 bit value starting with the code yields the same result\n co[rev[v] >> rvb] = sv;\n }\n }\n }\n }\n else {\n co = new u16(s);\n for (i = 0; i < s; ++i) {\n if (cd[i]) {\n co[i] = rev[le[cd[i] - 1]++] >> (15 - cd[i]);\n }\n }\n }\n return co;\n});\n// fixed length tree\nvar flt = new u8(288);\nfor (var i = 0; i < 144; ++i)\n flt[i] = 8;\nfor (var i = 144; i < 256; ++i)\n flt[i] = 9;\nfor (var i = 256; i < 280; ++i)\n flt[i] = 7;\nfor (var i = 280; i < 288; ++i)\n flt[i] = 8;\n// fixed distance tree\nvar fdt = new u8(32);\nfor (var i = 0; i < 32; ++i)\n fdt[i] = 5;\n// fixed length map\nvar flm = /*#__PURE__*/ hMap(flt, 9, 0), flrm = /*#__PURE__*/ hMap(flt, 9, 1);\n// fixed distance map\nvar fdm = /*#__PURE__*/ hMap(fdt, 5, 0), fdrm = /*#__PURE__*/ hMap(fdt, 5, 1);\n// find max of array\nvar max = function (a) {\n var m = a[0];\n for (var i = 1; i < a.length; ++i) {\n if (a[i] > m)\n m = a[i];\n }\n return m;\n};\n// read d, starting at bit p and mask with m\nvar bits = function (d, p, m) {\n var o = (p / 8) | 0;\n return ((d[o] | (d[o + 1] << 8)) >> (p & 7)) & m;\n};\n// read d, starting at bit p continuing for at least 16 bits\nvar bits16 = function (d, p) {\n var o = (p / 8) | 0;\n return ((d[o] | (d[o + 1] << 8) | (d[o + 2] << 16)) >> (p & 7));\n};\n// get end of byte\nvar shft = function (p) { return ((p + 7) / 8) | 0; };\n// typed array slice - allows garbage collector to free original reference,\n// while being more compatible than .slice\nvar slc = function (v, s, e) {\n if (s == null || s < 0)\n s = 0;\n if (e == null || e > v.length)\n e = v.length;\n // can't use .constructor in case user-supplied\n return new u8(v.subarray(s, e));\n};\n/**\n * Codes for errors generated within this library\n */\nexports.FlateErrorCode = {\n UnexpectedEOF: 0,\n InvalidBlockType: 1,\n InvalidLengthLiteral: 2,\n InvalidDistance: 3,\n StreamFinished: 4,\n NoStreamHandler: 5,\n InvalidHeader: 6,\n NoCallback: 7,\n InvalidUTF8: 8,\n ExtraFieldTooLong: 9,\n InvalidDate: 10,\n FilenameTooLong: 11,\n StreamFinishing: 12,\n InvalidZipData: 13,\n UnknownCompressionMethod: 14\n};\n// error codes\nvar ec = [\n 'unexpected EOF',\n 'invalid block type',\n 'invalid length/literal',\n 'invalid distance',\n 'stream finished',\n 'no stream handler',\n ,\n 'no callback',\n 'invalid UTF-8 data',\n 'extra field too long',\n 'date not in range 1980-2099',\n 'filename too long',\n 'stream finishing',\n 'invalid zip data'\n // determined by unknown compression method\n];\n;\nvar err = function (ind, msg, nt) {\n var e = new Error(msg || ec[ind]);\n e.code = ind;\n if (Error.captureStackTrace)\n Error.captureStackTrace(e, err);\n if (!nt)\n throw e;\n return e;\n};\n// expands raw DEFLATE data\nvar inflt = function (dat, st, buf, dict) {\n // source length dict length\n var sl = dat.length, dl = dict ? dict.length : 0;\n if (!sl || st.f && !st.l)\n return buf || new u8(0);\n var noBuf = !buf;\n // have to estimate size\n var resize = noBuf || st.i != 2;\n // no state\n var noSt = st.i;\n // Assumes roughly 33% compression ratio average\n if (noBuf)\n buf = new u8(sl * 3);\n // ensure buffer can fit at least l elements\n var cbuf = function (l) {\n var bl = buf.length;\n // need to increase size to fit\n if (l > bl) {\n // Double or set to necessary, whichever is greater\n var nbuf = new u8(Math.max(bl * 2, l));\n nbuf.set(buf);\n buf = nbuf;\n }\n };\n // last chunk bitpos bytes\n var final = st.f || 0, pos = st.p || 0, bt = st.b || 0, lm = st.l, dm = st.d, lbt = st.m, dbt = st.n;\n // total bits\n var tbts = sl * 8;\n do {\n if (!lm) {\n // BFINAL - this is only 1 when last chunk is next\n final = bits(dat, pos, 1);\n // type: 0 = no compression, 1 = fixed huffman, 2 = dynamic huffman\n var type = bits(dat, pos + 1, 3);\n pos += 3;\n if (!type) {\n // go to end of byte boundary\n var s = shft(pos) + 4, l = dat[s - 4] | (dat[s - 3] << 8), t = s + l;\n if (t > sl) {\n if (noSt)\n err(0);\n break;\n }\n // ensure size\n if (resize)\n cbuf(bt + l);\n // Copy over uncompressed data\n buf.set(dat.subarray(s, t), bt);\n // Get new bitpos, update byte count\n st.b = bt += l, st.p = pos = t * 8, st.f = final;\n continue;\n }\n else if (type == 1)\n lm = flrm, dm = fdrm, lbt = 9, dbt = 5;\n else if (type == 2) {\n // literal lengths\n var hLit = bits(dat, pos, 31) + 257, hcLen = bits(dat, pos + 10, 15) + 4;\n var tl = hLit + bits(dat, pos + 5, 31) + 1;\n pos += 14;\n // length+distance tree\n var ldt = new u8(tl);\n // code length tree\n var clt = new u8(19);\n for (var i = 0; i < hcLen; ++i) {\n // use index map to get real code\n clt[clim[i]] = bits(dat, pos + i * 3, 7);\n }\n pos += hcLen * 3;\n // code lengths bits\n var clb = max(clt), clbmsk = (1 << clb) - 1;\n // code lengths map\n var clm = hMap(clt, clb, 1);\n for (var i = 0; i < tl;) {\n var r = clm[bits(dat, pos, clbmsk)];\n // bits read\n pos += r & 15;\n // symbol\n var s = r >> 4;\n // code length to copy\n if (s < 16) {\n ldt[i++] = s;\n }\n else {\n // copy count\n var c = 0, n = 0;\n if (s == 16)\n n = 3 + bits(dat, pos, 3), pos += 2, c = ldt[i - 1];\n else if (s == 17)\n n = 3 + bits(dat, pos, 7), pos += 3;\n else if (s == 18)\n n = 11 + bits(dat, pos, 127), pos += 7;\n while (n--)\n ldt[i++] = c;\n }\n }\n // length tree distance tree\n var lt = ldt.subarray(0, hLit), dt = ldt.subarray(hLit);\n // max length bits\n lbt = max(lt);\n // max dist bits\n dbt = max(dt);\n lm = hMap(lt, lbt, 1);\n dm = hMap(dt, dbt, 1);\n }\n else\n err(1);\n if (pos > tbts) {\n if (noSt)\n err(0);\n break;\n }\n }\n // Make sure the buffer can hold this + the largest possible addition\n // Maximum chunk size (practically, theoretically infinite) is 2^17\n if (resize)\n cbuf(bt + 131072);\n var lms = (1 << lbt) - 1, dms = (1 << dbt) - 1;\n var lpos = pos;\n for (;; lpos = pos) {\n // bits read, code\n var c = lm[bits16(dat, pos) & lms], sym = c >> 4;\n pos += c & 15;\n if (pos > tbts) {\n if (noSt)\n err(0);\n break;\n }\n if (!c)\n err(2);\n if (sym < 256)\n buf[bt++] = sym;\n else if (sym == 256) {\n lpos = pos, lm = null;\n break;\n }\n else {\n var add = sym - 254;\n // no extra bits needed if less\n if (sym > 264) {\n // index\n var i = sym - 257, b = fleb[i];\n add = bits(dat, pos, (1 << b) - 1) + fl[i];\n pos += b;\n }\n // dist\n var d = dm[bits16(dat, pos) & dms], dsym = d >> 4;\n if (!d)\n err(3);\n pos += d & 15;\n var dt = fd[dsym];\n if (dsym > 3) {\n var b = fdeb[dsym];\n dt += bits16(dat, pos) & (1 << b) - 1, pos += b;\n }\n if (pos > tbts) {\n if (noSt)\n err(0);\n break;\n }\n if (resize)\n cbuf(bt + 131072);\n var end = bt + add;\n if (bt < dt) {\n var shift = dl - dt, dend = Math.min(dt, end);\n if (shift + bt < 0)\n err(3);\n for (; bt < dend; ++bt)\n buf[bt] = dict[shift + bt];\n }\n for (; bt < end; ++bt)\n buf[bt] = buf[bt - dt];\n }\n }\n st.l = lm, st.p = lpos, st.b = bt, st.f = final;\n if (lm)\n final = 1, st.m = lbt, st.d = dm, st.n = dbt;\n } while (!final);\n // don't reallocate for streams or user buffers\n return bt != buf.length && noBuf ? slc(buf, 0, bt) : buf.subarray(0, bt);\n};\n// starting at p, write the minimum number of bits that can hold v to d\nvar wbits = function (d, p, v) {\n v <<= p & 7;\n var o = (p / 8) | 0;\n d[o] |= v;\n d[o + 1] |= v >> 8;\n};\n// starting at p, write the minimum number of bits (>8) that can hold v to d\nvar wbits16 = function (d, p, v) {\n v <<= p & 7;\n var o = (p / 8) | 0;\n d[o] |= v;\n d[o + 1] |= v >> 8;\n d[o + 2] |= v >> 16;\n};\n// creates code lengths from a frequency table\nvar hTree = function (d, mb) {\n // Need extra info to make a tree\n var t = [];\n for (var i = 0; i < d.length; ++i) {\n if (d[i])\n t.push({ s: i, f: d[i] });\n }\n var s = t.length;\n var t2 = t.slice();\n if (!s)\n return { t: et, l: 0 };\n if (s == 1) {\n var v = new u8(t[0].s + 1);\n v[t[0].s] = 1;\n return { t: v, l: 1 };\n }\n t.sort(function (a, b) { return a.f - b.f; });\n // after i2 reaches last ind, will be stopped\n // freq must be greater than largest possible number of symbols\n t.push({ s: -1, f: 25001 });\n var l = t[0], r = t[1], i0 = 0, i1 = 1, i2 = 2;\n t[0] = { s: -1, f: l.f + r.f, l: l, r: r };\n // efficient algorithm from UZIP.js\n // i0 is lookbehind, i2 is lookahead - after processing two low-freq\n // symbols that combined have high freq, will start processing i2 (high-freq,\n // non-composite) symbols instead\n // see https://reddit.com/r/photopea/comments/ikekht/uzipjs_questions/\n while (i1 != s - 1) {\n l = t[t[i0].f < t[i2].f ? i0++ : i2++];\n r = t[i0 != i1 && t[i0].f < t[i2].f ? i0++ : i2++];\n t[i1++] = { s: -1, f: l.f + r.f, l: l, r: r };\n }\n var maxSym = t2[0].s;\n for (var i = 1; i < s; ++i) {\n if (t2[i].s > maxSym)\n maxSym = t2[i].s;\n }\n // code lengths\n var tr = new u16(maxSym + 1);\n // max bits in tree\n var mbt = ln(t[i1 - 1], tr, 0);\n if (mbt > mb) {\n // more algorithms from UZIP.js\n // TODO: find out how this code works (debt)\n // ind debt\n var i = 0, dt = 0;\n // left cost\n var lft = mbt - mb, cst = 1 << lft;\n t2.sort(function (a, b) { return tr[b.s] - tr[a.s] || a.f - b.f; });\n for (; i < s; ++i) {\n var i2_1 = t2[i].s;\n if (tr[i2_1] > mb) {\n dt += cst - (1 << (mbt - tr[i2_1]));\n tr[i2_1] = mb;\n }\n else\n break;\n }\n dt >>= lft;\n while (dt > 0) {\n var i2_2 = t2[i].s;\n if (tr[i2_2] < mb)\n dt -= 1 << (mb - tr[i2_2]++ - 1);\n else\n ++i;\n }\n for (; i >= 0 && dt; --i) {\n var i2_3 = t2[i].s;\n if (tr[i2_3] == mb) {\n --tr[i2_3];\n ++dt;\n }\n }\n mbt = mb;\n }\n return { t: new u8(tr), l: mbt };\n};\n// get the max length and assign length codes\nvar ln = function (n, l, d) {\n return n.s == -1\n ? Math.max(ln(n.l, l, d + 1), ln(n.r, l, d + 1))\n : (l[n.s] = d);\n};\n// length codes generation\nvar lc = function (c) {\n var s = c.length;\n // Note that the semicolon was intentional\n while (s && !c[--s])\n ;\n var cl = new u16(++s);\n // ind num streak\n var cli = 0, cln = c[0], cls = 1;\n var w = function (v) { cl[cli++] = v; };\n for (var i = 1; i <= s; ++i) {\n if (c[i] == cln && i != s)\n ++cls;\n else {\n if (!cln && cls > 2) {\n for (; cls > 138; cls -= 138)\n w(32754);\n if (cls > 2) {\n w(cls > 10 ? ((cls - 11) << 5) | 28690 : ((cls - 3) << 5) | 12305);\n cls = 0;\n }\n }\n else if (cls > 3) {\n w(cln), --cls;\n for (; cls > 6; cls -= 6)\n w(8304);\n if (cls > 2)\n w(((cls - 3) << 5) | 8208), cls = 0;\n }\n while (cls--)\n w(cln);\n cls = 1;\n cln = c[i];\n }\n }\n return { c: cl.subarray(0, cli), n: s };\n};\n// calculate the length of output from tree, code lengths\nvar clen = function (cf, cl) {\n var l = 0;\n for (var i = 0; i < cl.length; ++i)\n l += cf[i] * cl[i];\n return l;\n};\n// writes a fixed block\n// returns the new bit pos\nvar wfblk = function (out, pos, dat) {\n // no need to write 00 as type: TypedArray defaults to 0\n var s = dat.length;\n var o = shft(pos + 2);\n out[o] = s & 255;\n out[o + 1] = s >> 8;\n out[o + 2] = out[o] ^ 255;\n out[o + 3] = out[o + 1] ^ 255;\n for (var i = 0; i < s; ++i)\n out[o + i + 4] = dat[i];\n return (o + 4 + s) * 8;\n};\n// writes a block\nvar wblk = function (dat, out, final, syms, lf, df, eb, li, bs, bl, p) {\n wbits(out, p++, final);\n ++lf[256];\n var _a = hTree(lf, 15), dlt = _a.t, mlb = _a.l;\n var _b = hTree(df, 15), ddt = _b.t, mdb = _b.l;\n var _c = lc(dlt), lclt = _c.c, nlc = _c.n;\n var _d = lc(ddt), lcdt = _d.c, ndc = _d.n;\n var lcfreq = new u16(19);\n for (var i = 0; i < lclt.length; ++i)\n ++lcfreq[lclt[i] & 31];\n for (var i = 0; i < lcdt.length; ++i)\n ++lcfreq[lcdt[i] & 31];\n var _e = hTree(lcfreq, 7), lct = _e.t, mlcb = _e.l;\n var nlcc = 19;\n for (; nlcc > 4 && !lct[clim[nlcc - 1]]; --nlcc)\n ;\n var flen = (bl + 5) << 3;\n var ftlen = clen(lf, flt) + clen(df, fdt) + eb;\n var dtlen = clen(lf, dlt) + clen(df, ddt) + eb + 14 + 3 * nlcc + clen(lcfreq, lct) + 2 * lcfreq[16] + 3 * lcfreq[17] + 7 * lcfreq[18];\n if (bs >= 0 && flen <= ftlen && flen <= dtlen)\n return wfblk(out, p, dat.subarray(bs, bs + bl));\n var lm, ll, dm, dl;\n wbits(out, p, 1 + (dtlen < ftlen)), p += 2;\n if (dtlen < ftlen) {\n lm = hMap(dlt, mlb, 0), ll = dlt, dm = hMap(ddt, mdb, 0), dl = ddt;\n var llm = hMap(lct, mlcb, 0);\n wbits(out, p, nlc - 257);\n wbits(out, p + 5, ndc - 1);\n wbits(out, p + 10, nlcc - 4);\n p += 14;\n for (var i = 0; i < nlcc; ++i)\n wbits(out, p + 3 * i, lct[clim[i]]);\n p += 3 * nlcc;\n var lcts = [lclt, lcdt];\n for (var it = 0; it < 2; ++it) {\n var clct = lcts[it];\n for (var i = 0; i < clct.length; ++i) {\n var len = clct[i] & 31;\n wbits(out, p, llm[len]), p += lct[len];\n if (len > 15)\n wbits(out, p, (clct[i] >> 5) & 127), p += clct[i] >> 12;\n }\n }\n }\n else {\n lm = flm, ll = flt, dm = fdm, dl = fdt;\n }\n for (var i = 0; i < li; ++i) {\n var sym = syms[i];\n if (sym > 255) {\n var len = (sym >> 18) & 31;\n wbits16(out, p, lm[len + 257]), p += ll[len + 257];\n if (len > 7)\n wbits(out, p, (sym >> 23) & 31), p += fleb[len];\n var dst = sym & 31;\n wbits16(out, p, dm[dst]), p += dl[dst];\n if (dst > 3)\n wbits16(out, p, (sym >> 5) & 8191), p += fdeb[dst];\n }\n else {\n wbits16(out, p, lm[sym]), p += ll[sym];\n }\n }\n wbits16(out, p, lm[256]);\n return p + ll[256];\n};\n// deflate options (nice << 13) | chain\nvar deo = /*#__PURE__*/ new i32([65540, 131080, 131088, 131104, 262176, 1048704, 1048832, 2114560, 2117632]);\n// empty\nvar et = /*#__PURE__*/ new u8(0);\n// compresses data into a raw DEFLATE buffer\nvar dflt = function (dat, lvl, plvl, pre, post, st) {\n var s = st.z || dat.length;\n var o = new u8(pre + s + 5 * (1 + Math.ceil(s / 7000)) + post);\n // writing to this writes to the output buffer\n var w = o.subarray(pre, o.length - post);\n var lst = st.l;\n var pos = (st.r || 0) & 7;\n if (lvl) {\n if (pos)\n w[0] = st.r >> 3;\n var opt = deo[lvl - 1];\n var n = opt >> 13, c = opt & 8191;\n var msk_1 = (1 << plvl) - 1;\n // prev 2-byte val map curr 2-byte val map\n var prev = st.p || new u16(32768), head = st.h || new u16(msk_1 + 1);\n var bs1_1 = Math.ceil(plvl / 3), bs2_1 = 2 * bs1_1;\n var hsh = function (i) { return (dat[i] ^ (dat[i + 1] << bs1_1) ^ (dat[i + 2] << bs2_1)) & msk_1; };\n // 24576 is an arbitrary number of maximum symbols per block\n // 424 buffer for last block\n var syms = new i32(25000);\n // length/literal freq distance freq\n var lf = new u16(288), df = new u16(32);\n // l/lcnt exbits index l/lind waitdx blkpos\n var lc_1 = 0, eb = 0, i = st.i || 0, li = 0, wi = st.w || 0, bs = 0;\n for (; i + 2 < s; ++i) {\n // hash value\n var hv = hsh(i);\n // index mod 32768 previous index mod\n var imod = i & 32767, pimod = head[hv];\n prev[imod] = pimod;\n head[hv] = imod;\n // We always should modify head and prev, but only add symbols if\n // this data is not yet processed (\"wait\" for wait index)\n if (wi <= i) {\n // bytes remaining\n var rem = s - i;\n if ((lc_1 > 7000 || li > 24576) && (rem > 423 || !lst)) {\n pos = wblk(dat, w, 0, syms, lf, df, eb, li, bs, i - bs, pos);\n li = lc_1 = eb = 0, bs = i;\n for (var j = 0; j < 286; ++j)\n lf[j] = 0;\n for (var j = 0; j < 30; ++j)\n df[j] = 0;\n }\n // len dist chain\n var l = 2, d = 0, ch_1 = c, dif = imod - pimod & 32767;\n if (rem > 2 && hv == hsh(i - dif)) {\n var maxn = Math.min(n, rem) - 1;\n var maxd = Math.min(32767, i);\n // max possible length\n // not capped at dif because decompressors implement \"rolling\" index population\n var ml = Math.min(258, rem);\n while (dif <= maxd && --ch_1 && imod != pimod) {\n if (dat[i + l] == dat[i + l - dif]) {\n var nl = 0;\n for (; nl < ml && dat[i + nl] == dat[i + nl - dif]; ++nl)\n ;\n if (nl > l) {\n l = nl, d = dif;\n // break out early when we reach \"nice\" (we are satisfied enough)\n if (nl > maxn)\n break;\n // now, find the rarest 2-byte sequence within this\n // length of literals and search for that instead.\n // Much faster than just using the start\n var mmd = Math.min(dif, nl - 2);\n var md = 0;\n for (var j = 0; j < mmd; ++j) {\n var ti = i - dif + j & 32767;\n var pti = prev[ti];\n var cd = ti - pti & 32767;\n if (cd > md)\n md = cd, pimod = ti;\n }\n }\n }\n // check the previous match\n imod = pimod, pimod = prev[imod];\n dif += imod - pimod & 32767;\n }\n }\n // d will be nonzero only when a match was found\n if (d) {\n // store both dist and len data in one int32\n // Make sure this is recognized as a len/dist with 28th bit (2^28)\n syms[li++] = 268435456 | (revfl[l] << 18) | revfd[d];\n var lin = revfl[l] & 31, din = revfd[d] & 31;\n eb += fleb[lin] + fdeb[din];\n ++lf[257 + lin];\n ++df[din];\n wi = i + l;\n ++lc_1;\n }\n else {\n syms[li++] = dat[i];\n ++lf[dat[i]];\n }\n }\n }\n for (i = Math.max(i, wi); i < s; ++i) {\n syms[li++] = dat[i];\n ++lf[dat[i]];\n }\n pos = wblk(dat, w, lst, syms, lf, df, eb, li, bs, i - bs, pos);\n if (!lst) {\n st.r = (pos & 7) | w[(pos / 8) | 0] << 3;\n // shft(pos) now 1 less if pos & 7 != 0\n pos -= 7;\n st.h = head, st.p = prev, st.i = i, st.w = wi;\n }\n }\n else {\n for (var i = st.w || 0; i < s + lst; i += 65535) {\n // end\n var e = i + 65535;\n if (e >= s) {\n // write final block\n w[(pos / 8) | 0] = lst;\n e = s;\n }\n pos = wfblk(w, pos + 1, dat.subarray(i, e));\n }\n st.i = s;\n }\n return slc(o, 0, pre + shft(pos) + post);\n};\n// CRC32 table\nvar crct = /*#__PURE__*/ (function () {\n var t = new Int32Array(256);\n for (var i = 0; i < 256; ++i) {\n var c = i, k = 9;\n while (--k)\n c = ((c & 1) && -306674912) ^ (c >>> 1);\n t[i] = c;\n }\n return t;\n})();\n// CRC32\nvar crc = function () {\n var c = -1;\n return {\n p: function (d) {\n // closures have awful performance\n var cr = c;\n for (var i = 0; i < d.length; ++i)\n cr = crct[(cr & 255) ^ d[i]] ^ (cr >>> 8);\n c = cr;\n },\n d: function () { return ~c; }\n };\n};\n// Adler32\nvar adler = function () {\n var a = 1, b = 0;\n return {\n p: function (d) {\n // closures have awful performance\n var n = a, m = b;\n var l = d.length | 0;\n for (var i = 0; i != l;) {\n var e = Math.min(i + 2655, l);\n for (; i < e; ++i)\n m += n += d[i];\n n = (n & 65535) + 15 * (n >> 16), m = (m & 65535) + 15 * (m >> 16);\n }\n a = n, b = m;\n },\n d: function () {\n a %= 65521, b %= 65521;\n return (a & 255) << 24 | (a & 0xFF00) << 8 | (b & 255) << 8 | (b >> 8);\n }\n };\n};\n;\n// deflate with opts\nvar dopt = function (dat, opt, pre, post, st) {\n if (!st) {\n st = { l: 1 };\n if (opt.dictionary) {\n var dict = opt.dictionary.subarray(-32768);\n var newDat = new u8(dict.length + dat.length);\n newDat.set(dict);\n newDat.set(dat, dict.length);\n dat = newDat;\n st.w = dict.length;\n }\n }\n return dflt(dat, opt.level == null ? 6 : opt.level, opt.mem == null ? (st.l ? Math.ceil(Math.max(8, Math.min(13, Math.log(dat.length))) * 1.5) : 20) : (12 + opt.mem), pre, post, st);\n};\n// Walmart object spread\nvar mrg = function (a, b) {\n var o = {};\n for (var k in a)\n o[k] = a[k];\n for (var k in b)\n o[k] = b[k];\n return o;\n};\n// worker clone\n// This is possibly the craziest part of the entire codebase, despite how simple it may seem.\n// The only parameter to this function is a closure that returns an array of variables outside of the function scope.\n// We're going to try to figure out the variable names used in the closure as strings because that is crucial for workerization.\n// We will return an object mapping of true variable name to value (basically, the current scope as a JS object).\n// The reason we can't just use the original variable names is minifiers mangling the toplevel scope.\n// This took me three weeks to figure out how to do.\nvar wcln = function (fn, fnStr, td) {\n var dt = fn();\n var st = fn.toString();\n var ks = st.slice(st.indexOf('[') + 1, st.lastIndexOf(']')).replace(/\\s+/g, '').split(',');\n for (var i = 0; i < dt.length; ++i) {\n var v = dt[i], k = ks[i];\n if (typeof v == 'function') {\n fnStr += ';' + k + '=';\n var st_1 = v.toString();\n if (v.prototype) {\n // for global objects\n if (st_1.indexOf('[native code]') != -1) {\n var spInd = st_1.indexOf(' ', 8) + 1;\n fnStr += st_1.slice(spInd, st_1.indexOf('(', spInd));\n }\n else {\n fnStr += st_1;\n for (var t in v.prototype)\n fnStr += ';' + k + '.prototype.' + t + '=' + v.prototype[t].toString();\n }\n }\n else\n fnStr += st_1;\n }\n else\n td[k] = v;\n }\n return fnStr;\n};\nvar ch = [];\n// clone bufs\nvar cbfs = function (v) {\n var tl = [];\n for (var k in v) {\n if (v[k].buffer) {\n tl.push((v[k] = new v[k].constructor(v[k])).buffer);\n }\n }\n return tl;\n};\n// use a worker to execute code\nvar wrkr = function (fns, init, id, cb) {\n if (!ch[id]) {\n var fnStr = '', td_1 = {}, m = fns.length - 1;\n for (var i = 0; i < m; ++i)\n fnStr = wcln(fns[i], fnStr, td_1);\n ch[id] = { c: wcln(fns[m], fnStr, td_1), e: td_1 };\n }\n var td = mrg({}, ch[id].e);\n return (0, node_worker_1.default)(ch[id].c + ';onmessage=function(e){for(var k in e.data)self[k]=e.data[k];onmessage=' + init.toString() + '}', id, td, cbfs(td), cb);\n};\n// base async inflate fn\nvar bInflt = function () { return [u8, u16, i32, fleb, fdeb, clim, fl, fd, flrm, fdrm, rev, ec, hMap, max, bits, bits16, shft, slc, err, inflt, inflateSync, pbf, gopt]; };\nvar bDflt = function () { return [u8, u16, i32, fleb, fdeb, clim, revfl, revfd, flm, flt, fdm, fdt, rev, deo, et, hMap, wbits, wbits16, hTree, ln, lc, clen, wfblk, wblk, shft, slc, dflt, dopt, deflateSync, pbf]; };\n// gzip extra\nvar gze = function () { return [gzh, gzhl, wbytes, crc, crct]; };\n// gunzip extra\nvar guze = function () { return [gzs, gzl]; };\n// zlib extra\nvar zle = function () { return [zlh, wbytes, adler]; };\n// unzlib extra\nvar zule = function () { return [zls]; };\n// post buf\nvar pbf = function (msg) { return postMessage(msg, [msg.buffer]); };\n// get opts\nvar gopt = function (o) { return o && {\n out: o.size && new u8(o.size),\n dictionary: o.dictionary\n}; };\n// async helper\nvar cbify = function (dat, opts, fns, init, id, cb) {\n var w = wrkr(fns, init, id, function (err, dat) {\n w.terminate();\n cb(err, dat);\n });\n w.postMessage([dat, opts], opts.consume ? [dat.buffer] : []);\n return function () { w.terminate(); };\n};\n// auto stream\nvar astrm = function (strm) {\n strm.ondata = function (dat, final) { return postMessage([dat, final], [dat.buffer]); };\n return function (ev) {\n if (ev.data.length) {\n strm.push(ev.data[0], ev.data[1]);\n postMessage([ev.data[0].length]);\n }\n else\n strm.flush();\n };\n};\n// async stream attach\nvar astrmify = function (fns, strm, opts, init, id, flush, ext) {\n var t;\n var w = wrkr(fns, init, id, function (err, dat) {\n if (err)\n w.terminate(), strm.ondata.call(strm, err);\n else if (!Array.isArray(dat))\n ext(dat);\n else if (dat.length == 1) {\n strm.queuedSize -= dat[0];\n if (strm.ondrain)\n strm.ondrain(dat[0]);\n }\n else {\n if (dat[1])\n w.terminate();\n strm.ondata.call(strm, err, dat[0], dat[1]);\n }\n });\n w.postMessage(opts);\n strm.queuedSize = 0;\n strm.push = function (d, f) {\n if (!strm.ondata)\n err(5);\n if (t)\n strm.ondata(err(4, 0, 1), null, !!f);\n strm.queuedSize += d.length;\n w.postMessage([d, t = f], [d.buffer]);\n };\n strm.terminate = function () { w.terminate(); };\n if (flush) {\n strm.flush = function () { w.postMessage([]); };\n }\n};\n// read 2 bytes\nvar b2 = function (d, b) { return d[b] | (d[b + 1] << 8); };\n// read 4 bytes\nvar b4 = function (d, b) { return (d[b] | (d[b + 1] << 8) | (d[b + 2] << 16) | (d[b + 3] << 24)) >>> 0; };\nvar b8 = function (d, b) { return b4(d, b) + (b4(d, b + 4) * 4294967296); };\n// write bytes\nvar wbytes = function (d, b, v) {\n for (; v; ++b)\n d[b] = v, v >>>= 8;\n};\n// gzip header\nvar gzh = function (c, o) {\n var fn = o.filename;\n c[0] = 31, c[1] = 139, c[2] = 8, c[8] = o.level < 2 ? 4 : o.level == 9 ? 2 : 0, c[9] = 3; // assume Unix\n if (o.mtime != 0)\n wbytes(c, 4, Math.floor(new Date(o.mtime || Date.now()) / 1000));\n if (fn) {\n c[3] = 8;\n for (var i = 0; i <= fn.length; ++i)\n c[i + 10] = fn.charCodeAt(i);\n }\n};\n// gzip footer: -8 to -4 = CRC, -4 to -0 is length\n// gzip start\nvar gzs = function (d) {\n if (d[0] != 31 || d[1] != 139 || d[2] != 8)\n err(6, 'invalid gzip data');\n var flg = d[3];\n var st = 10;\n if (flg & 4)\n st += (d[10] | d[11] << 8) + 2;\n for (var zs = (flg >> 3 & 1) + (flg >> 4 & 1); zs > 0; zs -= !d[st++])\n ;\n return st + (flg & 2);\n};\n// gzip length\nvar gzl = function (d) {\n var l = d.length;\n return (d[l - 4] | d[l - 3] << 8 | d[l - 2] << 16 | d[l - 1] << 24) >>> 0;\n};\n// gzip header length\nvar gzhl = function (o) { return 10 + (o.filename ? o.filename.length + 1 : 0); };\n// zlib header\nvar zlh = function (c, o) {\n var lv = o.level, fl = lv == 0 ? 0 : lv < 6 ? 1 : lv == 9 ? 3 : 2;\n c[0] = 120, c[1] = (fl << 6) | (o.dictionary && 32);\n c[1] |= 31 - ((c[0] << 8) | c[1]) % 31;\n if (o.dictionary) {\n var h = adler();\n h.p(o.dictionary);\n wbytes(c, 2, h.d());\n }\n};\n// zlib start\nvar zls = function (d, dict) {\n if ((d[0] & 15) != 8 || (d[0] >> 4) > 7 || ((d[0] << 8 | d[1]) % 31))\n err(6, 'invalid zlib data');\n if ((d[1] >> 5 & 1) == +!dict)\n err(6, 'invalid zlib data: ' + (d[1] & 32 ? 'need' : 'unexpected') + ' dictionary');\n return (d[1] >> 3 & 4) + 2;\n};\nfunction StrmOpt(opts, cb) {\n if (typeof opts == 'function')\n cb = opts, opts = {};\n this.ondata = cb;\n return opts;\n}\n/**\n * Streaming DEFLATE compression\n */\nvar Deflate = /*#__PURE__*/ (function () {\n function Deflate(opts, cb) {\n if (typeof opts == 'function')\n cb = opts, opts = {};\n this.ondata = cb;\n this.o = opts || {};\n this.s = { l: 0, i: 32768, w: 32768, z: 32768 };\n // Buffer length must always be 0 mod 32768 for index calculations to be correct when modifying head and prev\n // 98304 = 32768 (lookback) + 65536 (common chunk size)\n this.b = new u8(98304);\n if (this.o.dictionary) {\n var dict = this.o.dictionary.subarray(-32768);\n this.b.set(dict, 32768 - dict.length);\n this.s.i = 32768 - dict.length;\n }\n }\n Deflate.prototype.p = function (c, f) {\n this.ondata(dopt(c, this.o, 0, 0, this.s), f);\n };\n /**\n * Pushes a chunk to be deflated\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Deflate.prototype.push = function (chunk, final) {\n if (!this.ondata)\n err(5);\n if (this.s.l)\n err(4);\n var endLen = chunk.length + this.s.z;\n if (endLen > this.b.length) {\n if (endLen > 2 * this.b.length - 32768) {\n var newBuf = new u8(endLen & -32768);\n newBuf.set(this.b.subarray(0, this.s.z));\n this.b = newBuf;\n }\n var split = this.b.length - this.s.z;\n this.b.set(chunk.subarray(0, split), this.s.z);\n this.s.z = this.b.length;\n this.p(this.b, false);\n this.b.set(this.b.subarray(-32768));\n this.b.set(chunk.subarray(split), 32768);\n this.s.z = chunk.length - split + 32768;\n this.s.i = 32766, this.s.w = 32768;\n }\n else {\n this.b.set(chunk, this.s.z);\n this.s.z += chunk.length;\n }\n this.s.l = final & 1;\n if (this.s.z > this.s.w + 8191 || final) {\n this.p(this.b, final || false);\n this.s.w = this.s.i, this.s.i -= 2;\n }\n };\n /**\n * Flushes buffered uncompressed data. Useful to immediately retrieve the\n * deflated output for small inputs.\n */\n Deflate.prototype.flush = function () {\n if (!this.ondata)\n err(5);\n if (this.s.l)\n err(4);\n this.p(this.b, false);\n this.s.w = this.s.i, this.s.i -= 2;\n };\n return Deflate;\n}());\nexports.Deflate = Deflate;\n/**\n * Asynchronous streaming DEFLATE compression\n */\nvar AsyncDeflate = /*#__PURE__*/ (function () {\n function AsyncDeflate(opts, cb) {\n astrmify([\n bDflt,\n function () { return [astrm, Deflate]; }\n ], this, StrmOpt.call(this, opts, cb), function (ev) {\n var strm = new Deflate(ev.data);\n onmessage = astrm(strm);\n }, 6, 1);\n }\n return AsyncDeflate;\n}());\nexports.AsyncDeflate = AsyncDeflate;\nfunction deflate(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n return cbify(data, opts, [\n bDflt,\n ], function (ev) { return pbf(deflateSync(ev.data[0], ev.data[1])); }, 0, cb);\n}\nexports.deflate = deflate;\n/**\n * Compresses data with DEFLATE without any wrapper\n * @param data The data to compress\n * @param opts The compression options\n * @returns The deflated version of the data\n */\nfunction deflateSync(data, opts) {\n return dopt(data, opts || {}, 0, 0);\n}\nexports.deflateSync = deflateSync;\n/**\n * Streaming DEFLATE decompression\n */\nvar Inflate = /*#__PURE__*/ (function () {\n function Inflate(opts, cb) {\n // no StrmOpt here to avoid adding to workerizer\n if (typeof opts == 'function')\n cb = opts, opts = {};\n this.ondata = cb;\n var dict = opts && opts.dictionary && opts.dictionary.subarray(-32768);\n this.s = { i: 0, b: dict ? dict.length : 0 };\n this.o = new u8(32768);\n this.p = new u8(0);\n if (dict)\n this.o.set(dict);\n }\n Inflate.prototype.e = function (c) {\n if (!this.ondata)\n err(5);\n if (this.d)\n err(4);\n if (!this.p.length)\n this.p = c;\n else if (c.length) {\n var n = new u8(this.p.length + c.length);\n n.set(this.p), n.set(c, this.p.length), this.p = n;\n }\n };\n Inflate.prototype.c = function (final) {\n this.s.i = +(this.d = final || false);\n var bts = this.s.b;\n var dt = inflt(this.p, this.s, this.o);\n this.ondata(slc(dt, bts, this.s.b), this.d);\n this.o = slc(dt, this.s.b - 32768), this.s.b = this.o.length;\n this.p = slc(this.p, (this.s.p / 8) | 0), this.s.p &= 7;\n };\n /**\n * Pushes a chunk to be inflated\n * @param chunk The chunk to push\n * @param final Whether this is the final chunk\n */\n Inflate.prototype.push = function (chunk, final) {\n this.e(chunk), this.c(final);\n };\n return Inflate;\n}());\nexports.Inflate = Inflate;\n/**\n * Asynchronous streaming DEFLATE decompression\n */\nvar AsyncInflate = /*#__PURE__*/ (function () {\n function AsyncInflate(opts, cb) {\n astrmify([\n bInflt,\n function () { return [astrm, Inflate]; }\n ], this, StrmOpt.call(this, opts, cb), function (ev) {\n var strm = new Inflate(ev.data);\n onmessage = astrm(strm);\n }, 7, 0);\n }\n return AsyncInflate;\n}());\nexports.AsyncInflate = AsyncInflate;\nfunction inflate(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n return cbify(data, opts, [\n bInflt\n ], function (ev) { return pbf(inflateSync(ev.data[0], gopt(ev.data[1]))); }, 1, cb);\n}\nexports.inflate = inflate;\n/**\n * Expands DEFLATE data with no wrapper\n * @param data The data to decompress\n * @param opts The decompression options\n * @returns The decompressed version of the data\n */\nfunction inflateSync(data, opts) {\n return inflt(data, { i: 2 }, opts && opts.out, opts && opts.dictionary);\n}\nexports.inflateSync = inflateSync;\n// before you yell at me for not just using extends, my reason is that TS inheritance is hard to workerize.\n/**\n * Streaming GZIP compression\n */\nvar Gzip = /*#__PURE__*/ (function () {\n function Gzip(opts, cb) {\n this.c = crc();\n this.l = 0;\n this.v = 1;\n Deflate.call(this, opts, cb);\n }\n /**\n * Pushes a chunk to be GZIPped\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Gzip.prototype.push = function (chunk, final) {\n this.c.p(chunk);\n this.l += chunk.length;\n Deflate.prototype.push.call(this, chunk, final);\n };\n Gzip.prototype.p = function (c, f) {\n var raw = dopt(c, this.o, this.v && gzhl(this.o), f && 8, this.s);\n if (this.v)\n gzh(raw, this.o), this.v = 0;\n if (f)\n wbytes(raw, raw.length - 8, this.c.d()), wbytes(raw, raw.length - 4, this.l);\n this.ondata(raw, f);\n };\n /**\n * Flushes buffered uncompressed data. Useful to immediately retrieve the\n * GZIPped output for small inputs.\n */\n Gzip.prototype.flush = function () {\n Deflate.prototype.flush.call(this);\n };\n return Gzip;\n}());\nexports.Gzip = Gzip;\nexports.Compress = Gzip;\n/**\n * Asynchronous streaming GZIP compression\n */\nvar AsyncGzip = /*#__PURE__*/ (function () {\n function AsyncGzip(opts, cb) {\n astrmify([\n bDflt,\n gze,\n function () { return [astrm, Deflate, Gzip]; }\n ], this, StrmOpt.call(this, opts, cb), function (ev) {\n var strm = new Gzip(ev.data);\n onmessage = astrm(strm);\n }, 8, 1);\n }\n return AsyncGzip;\n}());\nexports.AsyncGzip = AsyncGzip;\nexports.AsyncCompress = AsyncGzip;\nfunction gzip(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n return cbify(data, opts, [\n bDflt,\n gze,\n function () { return [gzipSync]; }\n ], function (ev) { return pbf(gzipSync(ev.data[0], ev.data[1])); }, 2, cb);\n}\nexports.gzip = gzip;\nexports.compress = gzip;\n/**\n * Compresses data with GZIP\n * @param data The data to compress\n * @param opts The compression options\n * @returns The gzipped version of the data\n */\nfunction gzipSync(data, opts) {\n if (!opts)\n opts = {};\n var c = crc(), l = data.length;\n c.p(data);\n var d = dopt(data, opts, gzhl(opts), 8), s = d.length;\n return gzh(d, opts), wbytes(d, s - 8, c.d()), wbytes(d, s - 4, l), d;\n}\nexports.gzipSync = gzipSync;\nexports.compressSync = gzipSync;\n/**\n * Streaming single or multi-member GZIP decompression\n */\nvar Gunzip = /*#__PURE__*/ (function () {\n function Gunzip(opts, cb) {\n this.v = 1;\n this.r = 0;\n Inflate.call(this, opts, cb);\n }\n /**\n * Pushes a chunk to be GUNZIPped\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Gunzip.prototype.push = function (chunk, final) {\n Inflate.prototype.e.call(this, chunk);\n this.r += chunk.length;\n if (this.v) {\n var p = this.p.subarray(this.v - 1);\n var s = p.length > 3 ? gzs(p) : 4;\n if (s > p.length) {\n if (!final)\n return;\n }\n else if (this.v > 1 && this.onmember) {\n this.onmember(this.r - p.length);\n }\n this.p = p.subarray(s), this.v = 0;\n }\n // necessary to prevent TS from using the closure value\n // This allows for workerization to function correctly\n Inflate.prototype.c.call(this, final);\n // process concatenated GZIP\n if (this.s.f && !this.s.l && !final) {\n this.v = shft(this.s.p) + 9;\n this.s = { i: 0 };\n this.o = new u8(0);\n this.push(new u8(0), final);\n }\n };\n return Gunzip;\n}());\nexports.Gunzip = Gunzip;\n/**\n * Asynchronous streaming single or multi-member GZIP decompression\n */\nvar AsyncGunzip = /*#__PURE__*/ (function () {\n function AsyncGunzip(opts, cb) {\n var _this = this;\n astrmify([\n bInflt,\n guze,\n function () { return [astrm, Inflate, Gunzip]; }\n ], this, StrmOpt.call(this, opts, cb), function (ev) {\n var strm = new Gunzip(ev.data);\n strm.onmember = function (offset) { return postMessage(offset); };\n onmessage = astrm(strm);\n }, 9, 0, function (offset) { return _this.onmember && _this.onmember(offset); });\n }\n return AsyncGunzip;\n}());\nexports.AsyncGunzip = AsyncGunzip;\nfunction gunzip(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n return cbify(data, opts, [\n bInflt,\n guze,\n function () { return [gunzipSync]; }\n ], function (ev) { return pbf(gunzipSync(ev.data[0], ev.data[1])); }, 3, cb);\n}\nexports.gunzip = gunzip;\n/**\n * Expands GZIP data\n * @param data The data to decompress\n * @param opts The decompression options\n * @returns The decompressed version of the data\n */\nfunction gunzipSync(data, opts) {\n var st = gzs(data);\n if (st + 8 > data.length)\n err(6, 'invalid gzip data');\n return inflt(data.subarray(st, -8), { i: 2 }, opts && opts.out || new u8(gzl(data)), opts && opts.dictionary);\n}\nexports.gunzipSync = gunzipSync;\n/**\n * Streaming Zlib compression\n */\nvar Zlib = /*#__PURE__*/ (function () {\n function Zlib(opts, cb) {\n this.c = adler();\n this.v = 1;\n Deflate.call(this, opts, cb);\n }\n /**\n * Pushes a chunk to be zlibbed\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Zlib.prototype.push = function (chunk, final) {\n this.c.p(chunk);\n Deflate.prototype.push.call(this, chunk, final);\n };\n Zlib.prototype.p = function (c, f) {\n var raw = dopt(c, this.o, this.v && (this.o.dictionary ? 6 : 2), f && 4, this.s);\n if (this.v)\n zlh(raw, this.o), this.v = 0;\n if (f)\n wbytes(raw, raw.length - 4, this.c.d());\n this.ondata(raw, f);\n };\n /**\n * Flushes buffered uncompressed data. Useful to immediately retrieve the\n * zlibbed output for small inputs.\n */\n Zlib.prototype.flush = function () {\n Deflate.prototype.flush.call(this);\n };\n return Zlib;\n}());\nexports.Zlib = Zlib;\n/**\n * Asynchronous streaming Zlib compression\n */\nvar AsyncZlib = /*#__PURE__*/ (function () {\n function AsyncZlib(opts, cb) {\n astrmify([\n bDflt,\n zle,\n function () { return [astrm, Deflate, Zlib]; }\n ], this, StrmOpt.call(this, opts, cb), function (ev) {\n var strm = new Zlib(ev.data);\n onmessage = astrm(strm);\n }, 10, 1);\n }\n return AsyncZlib;\n}());\nexports.AsyncZlib = AsyncZlib;\nfunction zlib(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n return cbify(data, opts, [\n bDflt,\n zle,\n function () { return [zlibSync]; }\n ], function (ev) { return pbf(zlibSync(ev.data[0], ev.data[1])); }, 4, cb);\n}\nexports.zlib = zlib;\n/**\n * Compress data with Zlib\n * @param data The data to compress\n * @param opts The compression options\n * @returns The zlib-compressed version of the data\n */\nfunction zlibSync(data, opts) {\n if (!opts)\n opts = {};\n var a = adler();\n a.p(data);\n var d = dopt(data, opts, opts.dictionary ? 6 : 2, 4);\n return zlh(d, opts), wbytes(d, d.length - 4, a.d()), d;\n}\nexports.zlibSync = zlibSync;\n/**\n * Streaming Zlib decompression\n */\nvar Unzlib = /*#__PURE__*/ (function () {\n function Unzlib(opts, cb) {\n Inflate.call(this, opts, cb);\n this.v = opts && opts.dictionary ? 2 : 1;\n }\n /**\n * Pushes a chunk to be unzlibbed\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Unzlib.prototype.push = function (chunk, final) {\n Inflate.prototype.e.call(this, chunk);\n if (this.v) {\n if (this.p.length < 6 && !final)\n return;\n this.p = this.p.subarray(zls(this.p, this.v - 1)), this.v = 0;\n }\n if (final) {\n if (this.p.length < 4)\n err(6, 'invalid zlib data');\n this.p = this.p.subarray(0, -4);\n }\n // necessary to prevent TS from using the closure value\n // This allows for workerization to function correctly\n Inflate.prototype.c.call(this, final);\n };\n return Unzlib;\n}());\nexports.Unzlib = Unzlib;\n/**\n * Asynchronous streaming Zlib decompression\n */\nvar AsyncUnzlib = /*#__PURE__*/ (function () {\n function AsyncUnzlib(opts, cb) {\n astrmify([\n bInflt,\n zule,\n function () { return [astrm, Inflate, Unzlib]; }\n ], this, StrmOpt.call(this, opts, cb), function (ev) {\n var strm = new Unzlib(ev.data);\n onmessage = astrm(strm);\n }, 11, 0);\n }\n return AsyncUnzlib;\n}());\nexports.AsyncUnzlib = AsyncUnzlib;\nfunction unzlib(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n return cbify(data, opts, [\n bInflt,\n zule,\n function () { return [unzlibSync]; }\n ], function (ev) { return pbf(unzlibSync(ev.data[0], gopt(ev.data[1]))); }, 5, cb);\n}\nexports.unzlib = unzlib;\n/**\n * Expands Zlib data\n * @param data The data to decompress\n * @param opts The decompression options\n * @returns The decompressed version of the data\n */\nfunction unzlibSync(data, opts) {\n return inflt(data.subarray(zls(data, opts && opts.dictionary), -4), { i: 2 }, opts && opts.out, opts && opts.dictionary);\n}\nexports.unzlibSync = unzlibSync;\n/**\n * Streaming GZIP, Zlib, or raw DEFLATE decompression\n */\nvar Decompress = /*#__PURE__*/ (function () {\n function Decompress(opts, cb) {\n this.o = StrmOpt.call(this, opts, cb) || {};\n this.G = Gunzip;\n this.I = Inflate;\n this.Z = Unzlib;\n }\n // init substream\n // overriden by AsyncDecompress\n Decompress.prototype.i = function () {\n var _this = this;\n this.s.ondata = function (dat, final) {\n _this.ondata(dat, final);\n };\n };\n /**\n * Pushes a chunk to be decompressed\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Decompress.prototype.push = function (chunk, final) {\n if (!this.ondata)\n err(5);\n if (!this.s) {\n if (this.p && this.p.length) {\n var n = new u8(this.p.length + chunk.length);\n n.set(this.p), n.set(chunk, this.p.length);\n }\n else\n this.p = chunk;\n if (this.p.length > 2) {\n this.s = (this.p[0] == 31 && this.p[1] == 139 && this.p[2] == 8)\n ? new this.G(this.o)\n : ((this.p[0] & 15) != 8 || (this.p[0] >> 4) > 7 || ((this.p[0] << 8 | this.p[1]) % 31))\n ? new this.I(this.o)\n : new this.Z(this.o);\n this.i();\n this.s.push(this.p, final);\n this.p = null;\n }\n }\n else\n this.s.push(chunk, final);\n };\n return Decompress;\n}());\nexports.Decompress = Decompress;\n/**\n * Asynchronous streaming GZIP, Zlib, or raw DEFLATE decompression\n */\nvar AsyncDecompress = /*#__PURE__*/ (function () {\n function AsyncDecompress(opts, cb) {\n Decompress.call(this, opts, cb);\n this.queuedSize = 0;\n this.G = AsyncGunzip;\n this.I = AsyncInflate;\n this.Z = AsyncUnzlib;\n }\n AsyncDecompress.prototype.i = function () {\n var _this = this;\n this.s.ondata = function (err, dat, final) {\n _this.ondata(err, dat, final);\n };\n this.s.ondrain = function (size) {\n _this.queuedSize -= size;\n if (_this.ondrain)\n _this.ondrain(size);\n };\n };\n /**\n * Pushes a chunk to be decompressed\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n AsyncDecompress.prototype.push = function (chunk, final) {\n this.queuedSize += chunk.length;\n Decompress.prototype.push.call(this, chunk, final);\n };\n return AsyncDecompress;\n}());\nexports.AsyncDecompress = AsyncDecompress;\nfunction decompress(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n return (data[0] == 31 && data[1] == 139 && data[2] == 8)\n ? gunzip(data, opts, cb)\n : ((data[0] & 15) != 8 || (data[0] >> 4) > 7 || ((data[0] << 8 | data[1]) % 31))\n ? inflate(data, opts, cb)\n : unzlib(data, opts, cb);\n}\nexports.decompress = decompress;\n/**\n * Expands compressed GZIP, Zlib, or raw DEFLATE data, automatically detecting the format\n * @param data The data to decompress\n * @param opts The decompression options\n * @returns The decompressed version of the data\n */\nfunction decompressSync(data, opts) {\n return (data[0] == 31 && data[1] == 139 && data[2] == 8)\n ? gunzipSync(data, opts)\n : ((data[0] & 15) != 8 || (data[0] >> 4) > 7 || ((data[0] << 8 | data[1]) % 31))\n ? inflateSync(data, opts)\n : unzlibSync(data, opts);\n}\nexports.decompressSync = decompressSync;\n// flatten a directory structure\nvar fltn = function (d, p, t, o) {\n for (var k in d) {\n var val = d[k], n = p + k, op = o;\n if (Array.isArray(val))\n op = mrg(o, val[1]), val = val[0];\n if (val instanceof u8)\n t[n] = [val, op];\n else {\n t[n += '/'] = [new u8(0), op];\n fltn(val, n, t, o);\n }\n }\n};\n// text encoder\nvar te = typeof TextEncoder != 'undefined' && /*#__PURE__*/ new TextEncoder();\n// text decoder\nvar td = typeof TextDecoder != 'undefined' && /*#__PURE__*/ new TextDecoder();\n// text decoder stream\nvar tds = 0;\ntry {\n td.decode(et, { stream: true });\n tds = 1;\n}\ncatch (e) { }\n// decode UTF8\nvar dutf8 = function (d) {\n for (var r = '', i = 0;;) {\n var c = d[i++];\n var eb = (c > 127) + (c > 223) + (c > 239);\n if (i + eb > d.length)\n return { s: r, r: slc(d, i - 1) };\n if (!eb)\n r += String.fromCharCode(c);\n else if (eb == 3) {\n c = ((c & 15) << 18 | (d[i++] & 63) << 12 | (d[i++] & 63) << 6 | (d[i++] & 63)) - 65536,\n r += String.fromCharCode(55296 | (c >> 10), 56320 | (c & 1023));\n }\n else if (eb & 1)\n r += String.fromCharCode((c & 31) << 6 | (d[i++] & 63));\n else\n r += String.fromCharCode((c & 15) << 12 | (d[i++] & 63) << 6 | (d[i++] & 63));\n }\n};\n/**\n * Streaming UTF-8 decoding\n */\nvar DecodeUTF8 = /*#__PURE__*/ (function () {\n /**\n * Creates a UTF-8 decoding stream\n * @param cb The callback to call whenever data is decoded\n */\n function DecodeUTF8(cb) {\n this.ondata = cb;\n if (tds)\n this.t = new TextDecoder();\n else\n this.p = et;\n }\n /**\n * Pushes a chunk to be decoded from UTF-8 binary\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n DecodeUTF8.prototype.push = function (chunk, final) {\n if (!this.ondata)\n err(5);\n final = !!final;\n if (this.t) {\n this.ondata(this.t.decode(chunk, { stream: true }), final);\n if (final) {\n if (this.t.decode().length)\n err(8);\n this.t = null;\n }\n return;\n }\n if (!this.p)\n err(4);\n var dat = new u8(this.p.length + chunk.length);\n dat.set(this.p);\n dat.set(chunk, this.p.length);\n var _a = dutf8(dat), s = _a.s, r = _a.r;\n if (final) {\n if (r.length)\n err(8);\n this.p = null;\n }\n else\n this.p = r;\n this.ondata(s, final);\n };\n return DecodeUTF8;\n}());\nexports.DecodeUTF8 = DecodeUTF8;\n/**\n * Streaming UTF-8 encoding\n */\nvar EncodeUTF8 = /*#__PURE__*/ (function () {\n /**\n * Creates a UTF-8 decoding stream\n * @param cb The callback to call whenever data is encoded\n */\n function EncodeUTF8(cb) {\n this.ondata = cb;\n }\n /**\n * Pushes a chunk to be encoded to UTF-8\n * @param chunk The string data to push\n * @param final Whether this is the last chunk\n */\n EncodeUTF8.prototype.push = function (chunk, final) {\n if (!this.ondata)\n err(5);\n if (this.d)\n err(4);\n this.ondata(strToU8(chunk), this.d = final || false);\n };\n return EncodeUTF8;\n}());\nexports.EncodeUTF8 = EncodeUTF8;\n/**\n * Converts a string into a Uint8Array for use with compression/decompression methods\n * @param str The string to encode\n * @param latin1 Whether or not to interpret the data as Latin-1. This should\n * not need to be true unless decoding a binary string.\n * @returns The string encoded in UTF-8/Latin-1 binary\n */\nfunction strToU8(str, latin1) {\n if (latin1) {\n var ar_1 = new u8(str.length);\n for (var i = 0; i < str.length; ++i)\n ar_1[i] = str.charCodeAt(i);\n return ar_1;\n }\n if (te)\n return te.encode(str);\n var l = str.length;\n var ar = new u8(str.length + (str.length >> 1));\n var ai = 0;\n var w = function (v) { ar[ai++] = v; };\n for (var i = 0; i < l; ++i) {\n if (ai + 5 > ar.length) {\n var n = new u8(ai + 8 + ((l - i) << 1));\n n.set(ar);\n ar = n;\n }\n var c = str.charCodeAt(i);\n if (c < 128 || latin1)\n w(c);\n else if (c < 2048)\n w(192 | (c >> 6)), w(128 | (c & 63));\n else if (c > 55295 && c < 57344)\n c = 65536 + (c & 1023 << 10) | (str.charCodeAt(++i) & 1023),\n w(240 | (c >> 18)), w(128 | ((c >> 12) & 63)), w(128 | ((c >> 6) & 63)), w(128 | (c & 63));\n else\n w(224 | (c >> 12)), w(128 | ((c >> 6) & 63)), w(128 | (c & 63));\n }\n return slc(ar, 0, ai);\n}\nexports.strToU8 = strToU8;\n/**\n * Converts a Uint8Array to a string\n * @param dat The data to decode to string\n * @param latin1 Whether or not to interpret the data as Latin-1. This should\n * not need to be true unless encoding to binary string.\n * @returns The original UTF-8/Latin-1 string\n */\nfunction strFromU8(dat, latin1) {\n if (latin1) {\n var r = '';\n for (var i = 0; i < dat.length; i += 16384)\n r += String.fromCharCode.apply(null, dat.subarray(i, i + 16384));\n return r;\n }\n else if (td) {\n return td.decode(dat);\n }\n else {\n var _a = dutf8(dat), s = _a.s, r = _a.r;\n if (r.length)\n err(8);\n return s;\n }\n}\nexports.strFromU8 = strFromU8;\n;\n// deflate bit flag\nvar dbf = function (l) { return l == 1 ? 3 : l < 6 ? 2 : l == 9 ? 1 : 0; };\n// skip local zip header\nvar slzh = function (d, b) { return b + 30 + b2(d, b + 26) + b2(d, b + 28); };\n// read zip header\nvar zh = function (d, b, z) {\n var fnl = b2(d, b + 28), fn = strFromU8(d.subarray(b + 46, b + 46 + fnl), !(b2(d, b + 8) & 2048)), es = b + 46 + fnl, bs = b4(d, b + 20);\n var _a = z && bs == 4294967295 ? z64e(d, es) : [bs, b4(d, b + 24), b4(d, b + 42)], sc = _a[0], su = _a[1], off = _a[2];\n return [b2(d, b + 10), sc, su, fn, es + b2(d, b + 30) + b2(d, b + 32), off];\n};\n// read zip64 extra field\nvar z64e = function (d, b) {\n for (; b2(d, b) != 1; b += 4 + b2(d, b + 2))\n ;\n return [b8(d, b + 12), b8(d, b + 4), b8(d, b + 20)];\n};\n// extra field length\nvar exfl = function (ex) {\n var le = 0;\n if (ex) {\n for (var k in ex) {\n var l = ex[k].length;\n if (l > 65535)\n err(9);\n le += l + 4;\n }\n }\n return le;\n};\n// write zip header\nvar wzh = function (d, b, f, fn, u, c, ce, co) {\n var fl = fn.length, ex = f.extra, col = co && co.length;\n var exl = exfl(ex);\n wbytes(d, b, ce != null ? 0x2014B50 : 0x4034B50), b += 4;\n if (ce != null)\n d[b++] = 20, d[b++] = f.os;\n d[b] = 20, b += 2; // spec compliance? what's that?\n d[b++] = (f.flag << 1) | (c < 0 && 8), d[b++] = u && 8;\n d[b++] = f.compression & 255, d[b++] = f.compression >> 8;\n var dt = new Date(f.mtime == null ? Date.now() : f.mtime), y = dt.getFullYear() - 1980;\n if (y < 0 || y > 119)\n err(10);\n wbytes(d, b, (y << 25) | ((dt.getMonth() + 1) << 21) | (dt.getDate() << 16) | (dt.getHours() << 11) | (dt.getMinutes() << 5) | (dt.getSeconds() >> 1)), b += 4;\n if (c != -1) {\n wbytes(d, b, f.crc);\n wbytes(d, b + 4, c < 0 ? -c - 2 : c);\n wbytes(d, b + 8, f.size);\n }\n wbytes(d, b + 12, fl);\n wbytes(d, b + 14, exl), b += 16;\n if (ce != null) {\n wbytes(d, b, col);\n wbytes(d, b + 6, f.attrs);\n wbytes(d, b + 10, ce), b += 14;\n }\n d.set(fn, b);\n b += fl;\n if (exl) {\n for (var k in ex) {\n var exf = ex[k], l = exf.length;\n wbytes(d, b, +k);\n wbytes(d, b + 2, l);\n d.set(exf, b + 4), b += 4 + l;\n }\n }\n if (col)\n d.set(co, b), b += col;\n return b;\n};\n// write zip footer (end of central directory)\nvar wzf = function (o, b, c, d, e) {\n wbytes(o, b, 0x6054B50); // skip disk\n wbytes(o, b + 8, c);\n wbytes(o, b + 10, c);\n wbytes(o, b + 12, d);\n wbytes(o, b + 16, e);\n};\n/**\n * A pass-through stream to keep data uncompressed in a ZIP archive.\n */\nvar ZipPassThrough = /*#__PURE__*/ (function () {\n /**\n * Creates a pass-through stream that can be added to ZIP archives\n * @param filename The filename to associate with this data stream\n */\n function ZipPassThrough(filename) {\n this.filename = filename;\n this.c = crc();\n this.size = 0;\n this.compression = 0;\n }\n /**\n * Processes a chunk and pushes to the output stream. You can override this\n * method in a subclass for custom behavior, but by default this passes\n * the data through. You must call this.ondata(err, chunk, final) at some\n * point in this method.\n * @param chunk The chunk to process\n * @param final Whether this is the last chunk\n */\n ZipPassThrough.prototype.process = function (chunk, final) {\n this.ondata(null, chunk, final);\n };\n /**\n * Pushes a chunk to be added. If you are subclassing this with a custom\n * compression algorithm, note that you must push data from the source\n * file only, pre-compression.\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n ZipPassThrough.prototype.push = function (chunk, final) {\n if (!this.ondata)\n err(5);\n this.c.p(chunk);\n this.size += chunk.length;\n if (final)\n this.crc = this.c.d();\n this.process(chunk, final || false);\n };\n return ZipPassThrough;\n}());\nexports.ZipPassThrough = ZipPassThrough;\n// I don't extend because TypeScript extension adds 1kB of runtime bloat\n/**\n * Streaming DEFLATE compression for ZIP archives. Prefer using AsyncZipDeflate\n * for better performance\n */\nvar ZipDeflate = /*#__PURE__*/ (function () {\n /**\n * Creates a DEFLATE stream that can be added to ZIP archives\n * @param filename The filename to associate with this data stream\n * @param opts The compression options\n */\n function ZipDeflate(filename, opts) {\n var _this = this;\n if (!opts)\n opts = {};\n ZipPassThrough.call(this, filename);\n this.d = new Deflate(opts, function (dat, final) {\n _this.ondata(null, dat, final);\n });\n this.compression = 8;\n this.flag = dbf(opts.level);\n }\n ZipDeflate.prototype.process = function (chunk, final) {\n try {\n this.d.push(chunk, final);\n }\n catch (e) {\n this.ondata(e, null, final);\n }\n };\n /**\n * Pushes a chunk to be deflated\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n ZipDeflate.prototype.push = function (chunk, final) {\n ZipPassThrough.prototype.push.call(this, chunk, final);\n };\n return ZipDeflate;\n}());\nexports.ZipDeflate = ZipDeflate;\n/**\n * Asynchronous streaming DEFLATE compression for ZIP archives\n */\nvar AsyncZipDeflate = /*#__PURE__*/ (function () {\n /**\n * Creates an asynchronous DEFLATE stream that can be added to ZIP archives\n * @param filename The filename to associate with this data stream\n * @param opts The compression options\n */\n function AsyncZipDeflate(filename, opts) {\n var _this = this;\n if (!opts)\n opts = {};\n ZipPassThrough.call(this, filename);\n this.d = new AsyncDeflate(opts, function (err, dat, final) {\n _this.ondata(err, dat, final);\n });\n this.compression = 8;\n this.flag = dbf(opts.level);\n this.terminate = this.d.terminate;\n }\n AsyncZipDeflate.prototype.process = function (chunk, final) {\n this.d.push(chunk, final);\n };\n /**\n * Pushes a chunk to be deflated\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n AsyncZipDeflate.prototype.push = function (chunk, final) {\n ZipPassThrough.prototype.push.call(this, chunk, final);\n };\n return AsyncZipDeflate;\n}());\nexports.AsyncZipDeflate = AsyncZipDeflate;\n// TODO: Better tree shaking\n/**\n * A zippable archive to which files can incrementally be added\n */\nvar Zip = /*#__PURE__*/ (function () {\n /**\n * Creates an empty ZIP archive to which files can be added\n * @param cb The callback to call whenever data for the generated ZIP archive\n * is available\n */\n function Zip(cb) {\n this.ondata = cb;\n this.u = [];\n this.d = 1;\n }\n /**\n * Adds a file to the ZIP archive\n * @param file The file stream to add\n */\n Zip.prototype.add = function (file) {\n var _this = this;\n if (!this.ondata)\n err(5);\n // finishing or finished\n if (this.d & 2)\n this.ondata(err(4 + (this.d & 1) * 8, 0, 1), null, false);\n else {\n var f = strToU8(file.filename), fl_1 = f.length;\n var com = file.comment, o = com && strToU8(com);\n var u = fl_1 != file.filename.length || (o && (com.length != o.length));\n var hl_1 = fl_1 + exfl(file.extra) + 30;\n if (fl_1 > 65535)\n this.ondata(err(11, 0, 1), null, false);\n var header = new u8(hl_1);\n wzh(header, 0, file, f, u, -1);\n var chks_1 = [header];\n var pAll_1 = function () {\n for (var _i = 0, chks_2 = chks_1; _i < chks_2.length; _i++) {\n var chk = chks_2[_i];\n _this.ondata(null, chk, false);\n }\n chks_1 = [];\n };\n var tr_1 = this.d;\n this.d = 0;\n var ind_1 = this.u.length;\n var uf_1 = mrg(file, {\n f: f,\n u: u,\n o: o,\n t: function () {\n if (file.terminate)\n file.terminate();\n },\n r: function () {\n pAll_1();\n if (tr_1) {\n var nxt = _this.u[ind_1 + 1];\n if (nxt)\n nxt.r();\n else\n _this.d = 1;\n }\n tr_1 = 1;\n }\n });\n var cl_1 = 0;\n file.ondata = function (err, dat, final) {\n if (err) {\n _this.ondata(err, dat, final);\n _this.terminate();\n }\n else {\n cl_1 += dat.length;\n chks_1.push(dat);\n if (final) {\n var dd = new u8(16);\n wbytes(dd, 0, 0x8074B50);\n wbytes(dd, 4, file.crc);\n wbytes(dd, 8, cl_1);\n wbytes(dd, 12, file.size);\n chks_1.push(dd);\n uf_1.c = cl_1, uf_1.b = hl_1 + cl_1 + 16, uf_1.crc = file.crc, uf_1.size = file.size;\n if (tr_1)\n uf_1.r();\n tr_1 = 1;\n }\n else if (tr_1)\n pAll_1();\n }\n };\n this.u.push(uf_1);\n }\n };\n /**\n * Ends the process of adding files and prepares to emit the final chunks.\n * This *must* be called after adding all desired files for the resulting\n * ZIP file to work properly.\n */\n Zip.prototype.end = function () {\n var _this = this;\n if (this.d & 2) {\n this.ondata(err(4 + (this.d & 1) * 8, 0, 1), null, true);\n return;\n }\n if (this.d)\n this.e();\n else\n this.u.push({\n r: function () {\n if (!(_this.d & 1))\n return;\n _this.u.splice(-1, 1);\n _this.e();\n },\n t: function () { }\n });\n this.d = 3;\n };\n Zip.prototype.e = function () {\n var bt = 0, l = 0, tl = 0;\n for (var _i = 0, _a = this.u; _i < _a.length; _i++) {\n var f = _a[_i];\n tl += 46 + f.f.length + exfl(f.extra) + (f.o ? f.o.length : 0);\n }\n var out = new u8(tl + 22);\n for (var _b = 0, _c = this.u; _b < _c.length; _b++) {\n var f = _c[_b];\n wzh(out, bt, f, f.f, f.u, -f.c - 2, l, f.o);\n bt += 46 + f.f.length + exfl(f.extra) + (f.o ? f.o.length : 0), l += f.b;\n }\n wzf(out, bt, this.u.length, tl, l);\n this.ondata(null, out, true);\n this.d = 2;\n };\n /**\n * A method to terminate any internal workers used by the stream. Subsequent\n * calls to add() will fail.\n */\n Zip.prototype.terminate = function () {\n for (var _i = 0, _a = this.u; _i < _a.length; _i++) {\n var f = _a[_i];\n f.t();\n }\n this.d = 2;\n };\n return Zip;\n}());\nexports.Zip = Zip;\nfunction zip(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n var r = {};\n fltn(data, '', r, opts);\n var k = Object.keys(r);\n var lft = k.length, o = 0, tot = 0;\n var slft = lft, files = new Array(lft);\n var term = [];\n var tAll = function () {\n for (var i = 0; i < term.length; ++i)\n term[i]();\n };\n var cbd = function (a, b) {\n mt(function () { cb(a, b); });\n };\n mt(function () { cbd = cb; });\n var cbf = function () {\n var out = new u8(tot + 22), oe = o, cdl = tot - o;\n tot = 0;\n for (var i = 0; i < slft; ++i) {\n var f = files[i];\n try {\n var l = f.c.length;\n wzh(out, tot, f, f.f, f.u, l);\n var badd = 30 + f.f.length + exfl(f.extra);\n var loc = tot + badd;\n out.set(f.c, loc);\n wzh(out, o, f, f.f, f.u, l, tot, f.m), o += 16 + badd + (f.m ? f.m.length : 0), tot = loc + l;\n }\n catch (e) {\n return cbd(e, null);\n }\n }\n wzf(out, o, files.length, cdl, oe);\n cbd(null, out);\n };\n if (!lft)\n cbf();\n var _loop_1 = function (i) {\n var fn = k[i];\n var _a = r[fn], file = _a[0], p = _a[1];\n var c = crc(), size = file.length;\n c.p(file);\n var f = strToU8(fn), s = f.length;\n var com = p.comment, m = com && strToU8(com), ms = m && m.length;\n var exl = exfl(p.extra);\n var compression = p.level == 0 ? 0 : 8;\n var cbl = function (e, d) {\n if (e) {\n tAll();\n cbd(e, null);\n }\n else {\n var l = d.length;\n files[i] = mrg(p, {\n size: size,\n crc: c.d(),\n c: d,\n f: f,\n m: m,\n u: s != fn.length || (m && (com.length != ms)),\n compression: compression\n });\n o += 30 + s + exl + l;\n tot += 76 + 2 * (s + exl) + (ms || 0) + l;\n if (!--lft)\n cbf();\n }\n };\n if (s > 65535)\n cbl(err(11, 0, 1), null);\n if (!compression)\n cbl(null, file);\n else if (size < 160000) {\n try {\n cbl(null, deflateSync(file, p));\n }\n catch (e) {\n cbl(e, null);\n }\n }\n else\n term.push(deflate(file, p, cbl));\n };\n // Cannot use lft because it can decrease\n for (var i = 0; i < slft; ++i) {\n _loop_1(i);\n }\n return tAll;\n}\nexports.zip = zip;\n/**\n * Synchronously creates a ZIP file. Prefer using `zip` for better performance\n * with more than one file.\n * @param data The directory structure for the ZIP archive\n * @param opts The main options, merged with per-file options\n * @returns The generated ZIP archive\n */\nfunction zipSync(data, opts) {\n if (!opts)\n opts = {};\n var r = {};\n var files = [];\n fltn(data, '', r, opts);\n var o = 0;\n var tot = 0;\n for (var fn in r) {\n var _a = r[fn], file = _a[0], p = _a[1];\n var compression = p.level == 0 ? 0 : 8;\n var f = strToU8(fn), s = f.length;\n var com = p.comment, m = com && strToU8(com), ms = m && m.length;\n var exl = exfl(p.extra);\n if (s > 65535)\n err(11);\n var d = compression ? deflateSync(file, p) : file, l = d.length;\n var c = crc();\n c.p(file);\n files.push(mrg(p, {\n size: file.length,\n crc: c.d(),\n c: d,\n f: f,\n m: m,\n u: s != fn.length || (m && (com.length != ms)),\n o: o,\n compression: compression\n }));\n o += 30 + s + exl + l;\n tot += 76 + 2 * (s + exl) + (ms || 0) + l;\n }\n var out = new u8(tot + 22), oe = o, cdl = tot - o;\n for (var i = 0; i < files.length; ++i) {\n var f = files[i];\n wzh(out, f.o, f, f.f, f.u, f.c.length);\n var badd = 30 + f.f.length + exfl(f.extra);\n out.set(f.c, f.o + badd);\n wzh(out, o, f, f.f, f.u, f.c.length, f.o, f.m), o += 16 + badd + (f.m ? f.m.length : 0);\n }\n wzf(out, o, files.length, cdl, oe);\n return out;\n}\nexports.zipSync = zipSync;\n/**\n * Streaming pass-through decompression for ZIP archives\n */\nvar UnzipPassThrough = /*#__PURE__*/ (function () {\n function UnzipPassThrough() {\n }\n UnzipPassThrough.prototype.push = function (data, final) {\n this.ondata(null, data, final);\n };\n UnzipPassThrough.compression = 0;\n return UnzipPassThrough;\n}());\nexports.UnzipPassThrough = UnzipPassThrough;\n/**\n * Streaming DEFLATE decompression for ZIP archives. Prefer AsyncZipInflate for\n * better performance.\n */\nvar UnzipInflate = /*#__PURE__*/ (function () {\n /**\n * Creates a DEFLATE decompression that can be used in ZIP archives\n */\n function UnzipInflate() {\n var _this = this;\n this.i = new Inflate(function (dat, final) {\n _this.ondata(null, dat, final);\n });\n }\n UnzipInflate.prototype.push = function (data, final) {\n try {\n this.i.push(data, final);\n }\n catch (e) {\n this.ondata(e, null, final);\n }\n };\n UnzipInflate.compression = 8;\n return UnzipInflate;\n}());\nexports.UnzipInflate = UnzipInflate;\n/**\n * Asynchronous streaming DEFLATE decompression for ZIP archives\n */\nvar AsyncUnzipInflate = /*#__PURE__*/ (function () {\n /**\n * Creates a DEFLATE decompression that can be used in ZIP archives\n */\n function AsyncUnzipInflate(_, sz) {\n var _this = this;\n if (sz < 320000) {\n this.i = new Inflate(function (dat, final) {\n _this.ondata(null, dat, final);\n });\n }\n else {\n this.i = new AsyncInflate(function (err, dat, final) {\n _this.ondata(err, dat, final);\n });\n this.terminate = this.i.terminate;\n }\n }\n AsyncUnzipInflate.prototype.push = function (data, final) {\n if (this.i.terminate)\n data = slc(data, 0);\n this.i.push(data, final);\n };\n AsyncUnzipInflate.compression = 8;\n return AsyncUnzipInflate;\n}());\nexports.AsyncUnzipInflate = AsyncUnzipInflate;\n/**\n * A ZIP archive decompression stream that emits files as they are discovered\n */\nvar Unzip = /*#__PURE__*/ (function () {\n /**\n * Creates a ZIP decompression stream\n * @param cb The callback to call whenever a file in the ZIP archive is found\n */\n function Unzip(cb) {\n this.onfile = cb;\n this.k = [];\n this.o = {\n 0: UnzipPassThrough\n };\n this.p = et;\n }\n /**\n * Pushes a chunk to be unzipped\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Unzip.prototype.push = function (chunk, final) {\n var _this = this;\n if (!this.onfile)\n err(5);\n if (!this.p)\n err(4);\n if (this.c > 0) {\n var len = Math.min(this.c, chunk.length);\n var toAdd = chunk.subarray(0, len);\n this.c -= len;\n if (this.d)\n this.d.push(toAdd, !this.c);\n else\n this.k[0].push(toAdd);\n chunk = chunk.subarray(len);\n if (chunk.length)\n return this.push(chunk, final);\n }\n else {\n var f = 0, i = 0, is = void 0, buf = void 0;\n if (!this.p.length)\n buf = chunk;\n else if (!chunk.length)\n buf = this.p;\n else {\n buf = new u8(this.p.length + chunk.length);\n buf.set(this.p), buf.set(chunk, this.p.length);\n }\n var l = buf.length, oc = this.c, add = oc && this.d;\n var _loop_2 = function () {\n var _a;\n var sig = b4(buf, i);\n if (sig == 0x4034B50) {\n f = 1, is = i;\n this_1.d = null;\n this_1.c = 0;\n var bf = b2(buf, i + 6), cmp_1 = b2(buf, i + 8), u = bf & 2048, dd = bf & 8, fnl = b2(buf, i + 26), es = b2(buf, i + 28);\n if (l > i + 30 + fnl + es) {\n var chks_3 = [];\n this_1.k.unshift(chks_3);\n f = 2;\n var sc_1 = b4(buf, i + 18), su_1 = b4(buf, i + 22);\n var fn_1 = strFromU8(buf.subarray(i + 30, i += 30 + fnl), !u);\n if (sc_1 == 4294967295) {\n _a = dd ? [-2] : z64e(buf, i), sc_1 = _a[0], su_1 = _a[1];\n }\n else if (dd)\n sc_1 = -1;\n i += es;\n this_1.c = sc_1;\n var d_1;\n var file_1 = {\n name: fn_1,\n compression: cmp_1,\n start: function () {\n if (!file_1.ondata)\n err(5);\n if (!sc_1)\n file_1.ondata(null, et, true);\n else {\n var ctr = _this.o[cmp_1];\n if (!ctr)\n file_1.ondata(err(14, 'unknown compression type ' + cmp_1, 1), null, false);\n d_1 = sc_1 < 0 ? new ctr(fn_1) : new ctr(fn_1, sc_1, su_1);\n d_1.ondata = function (err, dat, final) { file_1.ondata(err, dat, final); };\n for (var _i = 0, chks_4 = chks_3; _i < chks_4.length; _i++) {\n var dat = chks_4[_i];\n d_1.push(dat, false);\n }\n if (_this.k[0] == chks_3 && _this.c)\n _this.d = d_1;\n else\n d_1.push(et, true);\n }\n },\n terminate: function () {\n if (d_1 && d_1.terminate)\n d_1.terminate();\n }\n };\n if (sc_1 >= 0)\n file_1.size = sc_1, file_1.originalSize = su_1;\n this_1.onfile(file_1);\n }\n return \"break\";\n }\n else if (oc) {\n if (sig == 0x8074B50) {\n is = i += 12 + (oc == -2 && 8), f = 3, this_1.c = 0;\n return \"break\";\n }\n else if (sig == 0x2014B50) {\n is = i -= 4, f = 3, this_1.c = 0;\n return \"break\";\n }\n }\n };\n var this_1 = this;\n for (; i < l - 4; ++i) {\n var state_1 = _loop_2();\n if (state_1 === \"break\")\n break;\n }\n this.p = et;\n if (oc < 0) {\n var dat = f ? buf.subarray(0, is - 12 - (oc == -2 && 8) - (b4(buf, is - 16) == 0x8074B50 && 4)) : buf.subarray(0, i);\n if (add)\n add.push(dat, !!f);\n else\n this.k[+(f == 2)].push(dat);\n }\n if (f & 2)\n return this.push(buf.subarray(i), final);\n this.p = buf.subarray(i);\n }\n if (final) {\n if (this.c)\n err(13);\n this.p = null;\n }\n };\n /**\n * Registers a decoder with the stream, allowing for files compressed with\n * the compression type provided to be expanded correctly\n * @param decoder The decoder constructor\n */\n Unzip.prototype.register = function (decoder) {\n this.o[decoder.compression] = decoder;\n };\n return Unzip;\n}());\nexports.Unzip = Unzip;\nvar mt = typeof queueMicrotask == 'function' ? queueMicrotask : typeof setTimeout == 'function' ? setTimeout : function (fn) { fn(); };\nfunction unzip(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n var term = [];\n var tAll = function () {\n for (var i = 0; i < term.length; ++i)\n term[i]();\n };\n var files = {};\n var cbd = function (a, b) {\n mt(function () { cb(a, b); });\n };\n mt(function () { cbd = cb; });\n var e = data.length - 22;\n for (; b4(data, e) != 0x6054B50; --e) {\n if (!e || data.length - e > 65558) {\n cbd(err(13, 0, 1), null);\n return tAll;\n }\n }\n ;\n var lft = b2(data, e + 8);\n if (lft) {\n var c = lft;\n var o = b4(data, e + 16);\n var z = o == 4294967295 || c == 65535;\n if (z) {\n var ze = b4(data, e - 12);\n z = b4(data, ze) == 0x6064B50;\n if (z) {\n c = lft = b4(data, ze + 32);\n o = b4(data, ze + 48);\n }\n }\n var fltr = opts && opts.filter;\n var _loop_3 = function (i) {\n var _a = zh(data, o, z), c_1 = _a[0], sc = _a[1], su = _a[2], fn = _a[3], no = _a[4], off = _a[5], b = slzh(data, off);\n o = no;\n var cbl = function (e, d) {\n if (e) {\n tAll();\n cbd(e, null);\n }\n else {\n if (d)\n files[fn] = d;\n if (!--lft)\n cbd(null, files);\n }\n };\n if (!fltr || fltr({\n name: fn,\n size: sc,\n originalSize: su,\n compression: c_1\n })) {\n if (!c_1)\n cbl(null, slc(data, b, b + sc));\n else if (c_1 == 8) {\n var infl = data.subarray(b, b + sc);\n // Synchronously decompress under 512KB, or barely-compressed data\n if (su < 524288 || sc > 0.8 * su) {\n try {\n cbl(null, inflateSync(infl, { out: new u8(su) }));\n }\n catch (e) {\n cbl(e, null);\n }\n }\n else\n term.push(inflate(infl, { size: su }, cbl));\n }\n else\n cbl(err(14, 'unknown compression type ' + c_1, 1), null);\n }\n else\n cbl(null, null);\n };\n for (var i = 0; i < c; ++i) {\n _loop_3(i);\n }\n }\n else\n cbd(null, {});\n return tAll;\n}\nexports.unzip = unzip;\n/**\n * Synchronously decompresses a ZIP archive. Prefer using `unzip` for better\n * performance with more than one file.\n * @param data The raw compressed ZIP file\n * @param opts The ZIP extraction options\n * @returns The decompressed files\n */\nfunction unzipSync(data, opts) {\n var files = {};\n var e = data.length - 22;\n for (; b4(data, e) != 0x6054B50; --e) {\n if (!e || data.length - e > 65558)\n err(13);\n }\n ;\n var c = b2(data, e + 8);\n if (!c)\n return {};\n var o = b4(data, e + 16);\n var z = o == 4294967295 || c == 65535;\n if (z) {\n var ze = b4(data, e - 12);\n z = b4(data, ze) == 0x6064B50;\n if (z) {\n c = b4(data, ze + 32);\n o = b4(data, ze + 48);\n }\n }\n var fltr = opts && opts.filter;\n for (var i = 0; i < c; ++i) {\n var _a = zh(data, o, z), c_2 = _a[0], sc = _a[1], su = _a[2], fn = _a[3], no = _a[4], off = _a[5], b = slzh(data, off);\n o = no;\n if (!fltr || fltr({\n name: fn,\n size: sc,\n originalSize: su,\n compression: c_2\n })) {\n if (!c_2)\n files[fn] = slc(data, b, b + sc);\n else if (c_2 == 8)\n files[fn] = inflateSync(data.subarray(b, b + sc), { out: new u8(su) });\n else\n err(14, 'unknown compression type ' + c_2);\n }\n }\n return files;\n}\nexports.unzipSync = unzipSync;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.decompressFromString = exports.compressIntoString = void 0;\nconst fflate_1 = require(\"fflate\");\nconst bufferToString = (buffer) => {\n let result = '';\n for (let value of buffer)\n result += String.fromCharCode(value);\n return result;\n};\nconst stringToBuffer = (str) => {\n let result = new Uint8Array(str.length);\n for (let i = 0; i < str.length; ++i)\n result[i] = str.charCodeAt(i);\n return result;\n};\nfunction compressIntoString(obj) {\n const json = obj === null || obj === undefined ? null : obj;\n const buffer = stringToBuffer(JSON.stringify(json));\n const compressed = (0, fflate_1.compressSync)(buffer);\n return bufferToString(compressed);\n}\nexports.compressIntoString = compressIntoString;\nfunction decompressFromString(str) {\n const buffer = stringToBuffer(str);\n const decompressed = (0, fflate_1.decompressSync)(buffer);\n const originalText = new TextDecoder().decode(decompressed);\n return JSON.parse(originalText);\n}\nexports.decompressFromString = decompressFromString;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./compression\"), exports);\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getIsoDatePart = void 0;\nfunction getIsoDatePart(date) {\n console.log('date 1: ', date.toISOString(), '\\n\\n\\n\\n\\n\\n\\n\\n');\n let d = new Date(date);\n console.log('date 2: ', d.toISOString(), '\\n\\n\\n\\n\\n\\n\\n\\n');\n let month = '' + (d.getMonth() + 1), day = '' + d.getDate(), year = d.getFullYear();\n if (month.length < 2) {\n month = '0' + month;\n }\n if (day.length < 2) {\n day = '0' + day;\n }\n return [year, month, day].join('-');\n}\nexports.getIsoDatePart = getIsoDatePart;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DateUtil = void 0;\nconst getIsoDatePart_1 = require(\"./getIsoDatePart/getIsoDatePart\");\nclass DateUtil {\n}\nexports.DateUtil = DateUtil;\nDateUtil.getIsoDatePart = getIsoDatePart_1.getIsoDatePart;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.StringUtil = void 0;\nclass StringUtil {\n static convertToHyphenCase(entityName, transformToLowerCase = true) {\n const slugName = entityName === null || entityName === void 0 ? void 0 : entityName.split(/(?=[A-Z])/).join('-');\n if (slugName && transformToLowerCase) {\n return slugName.toLowerCase();\n }\n return slugName;\n }\n static parseVariables(variableString, data, quoteStrings = false) {\n const regExp = /\\{([^}]+)\\}/g;\n if (!variableString) {\n return variableString;\n }\n const replacedString = variableString.replace(regExp, (match, group) => {\n const variableLevels = group.split('.');\n let replacementValue = data;\n for (let i = 0; i < variableLevels.length; i++) {\n if (replacementValue) {\n replacementValue = replacementValue[variableLevels[i]];\n }\n else {\n replacementValue = undefined;\n }\n }\n if (quoteStrings && StringUtil.isString(replacementValue)) {\n replacementValue = JSON.stringify(replacementValue);\n }\n if (StringUtil.isArray(replacementValue)) {\n if (quoteStrings) {\n const newArray = [];\n for (const val of replacementValue) {\n newArray.push(JSON.stringify(val));\n }\n replacementValue = newArray;\n }\n replacementValue = '[' + replacementValue + ']';\n }\n if (Object.prototype.toString.call(replacementValue) === '[object Object]') {\n replacementValue = JSON.stringify(replacementValue);\n }\n return replacementValue;\n });\n return replacedString;\n }\n static convertToCamelCase(str) {\n if (!str) {\n return str;\n }\n str = str.replace(/-/g, ' ');\n return str\n .replace(/(?:^\\w|[A-Z]|\\b\\w)/g, function (word, index) {\n return index === 0 ? word.toLowerCase() : word.toUpperCase();\n })\n .replace(/\\s+/g, '');\n }\n static convertToTitleCase(str) {\n const camelCase = this.convertToCamelCase(str);\n const withSpaces = camelCase.replace(/([A-Z])/g, ' $1');\n return withSpaces.charAt(0).toUpperCase() + withSpaces.slice(1);\n }\n static isString(value) {\n return typeof value === 'string' || value instanceof String;\n }\n static isArray(value) {\n return Array.isArray(value);\n }\n static decodeEncodedString(encodedString) {\n return encodedString.replace(/_COMMA_/g, ',').replace(/%[0-9A-Fa-f]{2}/g, (match) => {\n try {\n return decodeURIComponent(match);\n }\n catch (_a) {\n return match;\n }\n });\n }\n static getStringSizeInMB(str) {\n const bytes = new TextEncoder().encode(str).length;\n return bytes / (1024 * 1024);\n }\n}\nexports.StringUtil = StringUtil;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MapUtil = void 0;\nconst string_util_1 = require(\"../string-util/string-util\");\nclass MapUtil {\n static keyBy(array, variableString) {\n if (variableString.charAt(0) !== '{') {\n variableString = `{${variableString}}`;\n }\n const map = {};\n for (const obj of array) {\n const value = string_util_1.StringUtil.parseVariables(variableString, obj);\n map[value] = obj;\n }\n return map;\n }\n}\nexports.MapUtil = MapUtil;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.cloneDeep = void 0;\nfunction cloneDeep(obj) {\n if (!obj) {\n return null;\n }\n return JSON.parse(JSON.stringify(obj));\n}\nexports.cloneDeep = cloneDeep;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isObject = void 0;\nfunction isObject(item) {\n return item && typeof item === 'object' && !Array.isArray(item);\n}\nexports.isObject = isObject;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.mergeDeep = void 0;\nconst isObject_1 = require(\"../isObject/isObject\");\nfunction mergeDeep(target, ...sources) {\n if (!sources.length)\n return target;\n const source = sources.shift();\n if ((0, isObject_1.isObject)(target) && (0, isObject_1.isObject)(source)) {\n for (const key in source) {\n if ((0, isObject_1.isObject)(source[key]) && !isDate(source[key])) {\n if (!target[key])\n Object.assign(target, { [key]: {} });\n mergeDeep(target[key], source[key]);\n }\n else {\n Object.assign(target, { [key]: source[key] });\n }\n }\n }\n return mergeDeep(target, ...sources);\n}\nexports.mergeDeep = mergeDeep;\nfunction isDate(object) {\n return object != null && object instanceof Date;\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getObjectDiff = exports.getObjectDiffs = void 0;\nfunction getObjectDiffs(before, after, prefix) {\n const diffs = [];\n if (!before || !after) {\n return diffs;\n }\n const beforeProperties = Object.getOwnPropertyNames(before);\n const afterProperties = Object.getOwnPropertyNames(after);\n const addedProperties = afterProperties.filter((value) => !beforeProperties.includes(value));\n const deletedProperties = beforeProperties.filter((value) => !afterProperties.includes(value));\n const commonProperties = beforeProperties.filter((value) => afterProperties.includes(value));\n addedProperties.forEach((addedProperty) => {\n diffs.push(getObjectDiff(null, after[addedProperty], prefix + addedProperty));\n });\n deletedProperties.forEach((deletedProperty) => {\n diffs.push(getObjectDiff(before[deletedProperty], null, prefix + deletedProperty));\n });\n commonProperties.forEach((commonProperty) => {\n let beforeVal = before[commonProperty];\n if (beforeVal === undefined || beforeVal === '') {\n beforeVal = null;\n }\n let afterVal = after[commonProperty];\n if (afterVal === undefined || afterVal === '') {\n afterVal = null;\n }\n if (beforeVal === afterVal) {\n return;\n }\n if (beforeVal === null || afterVal === null) {\n diffs.push(getObjectDiff(beforeVal, afterVal, prefix + commonProperty));\n return;\n }\n if (typeof beforeVal !== typeof afterVal) {\n diffs.push(getObjectDiff(beforeVal, afterVal, prefix + commonProperty));\n return;\n }\n if (isObject(beforeVal)) {\n if (isDate(beforeVal)) {\n if (!datesEqual(beforeVal, afterVal)) {\n diffs.push(getObjectDiff(beforeVal, afterVal, prefix + commonProperty));\n }\n }\n else if (Array.isArray(beforeVal) && Array.isArray(afterVal)) {\n const beforeArray = [...beforeVal].sort(sortFunc);\n const afterArray = [...afterVal].sort(sortFunc);\n if (JSON.stringify(beforeArray) !== JSON.stringify(afterArray)) {\n diffs.push(getObjectDiff(beforeVal, afterVal, prefix + commonProperty));\n }\n }\n else if ((Array.isArray(beforeVal) && !Array.isArray(afterVal)) ||\n (!Array.isArray(beforeVal) && Array.isArray(afterVal))) {\n diffs.push(getObjectDiff(beforeVal, afterVal, prefix + commonProperty));\n }\n else {\n const nestedObjectDiffs = getObjectDiffs(beforeVal, afterVal, prefix + commonProperty + '.');\n diffs.push(...nestedObjectDiffs);\n }\n }\n else {\n if (beforeVal !== afterVal) {\n diffs.push(getObjectDiff(beforeVal, afterVal, prefix + commonProperty));\n }\n }\n });\n return diffs;\n}\nexports.getObjectDiffs = getObjectDiffs;\nfunction getObjectDiff(before, after, name) {\n const diff = {\n propertyName: name,\n oldValue: before,\n newValue: after,\n };\n return diff;\n}\nexports.getObjectDiff = getObjectDiff;\nfunction sortFunc(x, y) {\n const pre = ['string', 'number', 'bool'];\n if (typeof x !== typeof y)\n return pre.indexOf(typeof y) - pre.indexOf(typeof x);\n if (x === y)\n return 0;\n else\n return x > y ? 1 : -1;\n}\nfunction isObject(object) {\n return object != null && typeof object === 'object';\n}\nfunction isDate(object) {\n return object != null && object instanceof Date;\n}\nfunction datesEqual(date1, date2) {\n return date1.getTime() === date2.getTime();\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isReferencePropertyType = exports.PropertyTypeMeta = exports.AllPropertyTypes = exports.PropertyType = void 0;\nvar PropertyType;\n(function (PropertyType) {\n PropertyType[\"Text\"] = \"text\";\n PropertyType[\"String\"] = \"string\";\n PropertyType[\"Number\"] = \"number\";\n PropertyType[\"Date\"] = \"date\";\n PropertyType[\"Boolean\"] = \"boolean\";\n PropertyType[\"MultiSelect\"] = \"multi_select\";\n PropertyType[\"SingleSelect\"] = \"choice\";\n PropertyType[\"Url\"] = \"url\";\n PropertyType[\"Currency\"] = \"currency\";\n PropertyType[\"Percent\"] = \"percent\";\n PropertyType[\"Rating\"] = \"rating\";\n PropertyType[\"Formula\"] = \"formula\";\n PropertyType[\"ObjectReference\"] = \"object_reference\";\n PropertyType[\"ObjectReferenceList\"] = \"object_ref_list\";\n PropertyType[\"TypeReference\"] = \"type_reference\";\n PropertyType[\"DataGrid\"] = \"data_grid\";\n PropertyType[\"CascadingSelect\"] = \"cascading_select\";\n PropertyType[\"Sequence\"] = \"sequence\";\n PropertyType[\"Constant\"] = \"constant\";\n PropertyType[\"Composite\"] = \"composite\";\n PropertyType[\"UserList\"] = \"userList\";\n PropertyType[\"Image\"] = \"image\";\n PropertyType[\"Json\"] = \"json\";\n PropertyType[\"Password\"] = \"password\";\n PropertyType[\"SizeRange\"] = \"size_range\";\n})(PropertyType = exports.PropertyType || (exports.PropertyType = {}));\nexports.AllPropertyTypes = [\n { label: 'Text', propertyType: PropertyType.Text, createable: true },\n { label: 'String', propertyType: PropertyType.String, createable: true },\n { label: 'Number', propertyType: PropertyType.Number, createable: true },\n { label: 'Date', propertyType: PropertyType.Date, createable: true },\n { label: 'Boolean', propertyType: PropertyType.Boolean, createable: true },\n { label: 'MultiSelect', propertyType: PropertyType.MultiSelect, createable: true },\n { label: 'SingleSelect', propertyType: PropertyType.SingleSelect, createable: true },\n { label: 'Url', propertyType: PropertyType.Url, createable: false },\n { label: 'Currency', propertyType: PropertyType.Currency, createable: true },\n { label: 'Percent', propertyType: PropertyType.Percent, createable: true },\n { label: 'Rating', propertyType: PropertyType.Rating, createable: false },\n { label: 'Formula', propertyType: PropertyType.Formula, createable: true },\n { label: 'ObjectReference', propertyType: PropertyType.ObjectReference, createable: true },\n { label: 'TypeReference', propertyType: PropertyType.TypeReference, createable: true },\n { label: 'ObjectReferenceList', propertyType: PropertyType.ObjectReferenceList, createable: false },\n { label: 'DataGrid', propertyType: PropertyType.DataGrid, createable: false },\n { label: 'CascadingSelect', propertyType: PropertyType.CascadingSelect, createable: false },\n { label: 'Sequence', propertyType: PropertyType.Sequence, createable: true },\n { label: 'Constant', propertyType: PropertyType.Constant, createable: false },\n { label: 'Composite', propertyType: PropertyType.Composite, createable: false },\n { label: 'UserList', propertyType: PropertyType.UserList, createable: true },\n { label: 'Image', propertyType: PropertyType.Image, createable: true },\n { label: 'Json', propertyType: PropertyType.Json, createable: true },\n { label: 'Password', propertyType: PropertyType.Password, createable: false },\n { label: 'Size Range', propertyType: PropertyType.SizeRange, createable: true },\n];\nexports.PropertyTypeMeta = new Map();\nexports.AllPropertyTypes.forEach((propDef) => {\n exports.PropertyTypeMeta.set(propDef.propertyType, propDef);\n});\nfunction isReferencePropertyType(propertyType) {\n return [PropertyType.ObjectReference, PropertyType.UserList, PropertyType.TypeReference].includes(propertyType);\n}\nexports.isReferencePropertyType = isReferencePropertyType;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.TypePropertySortOrder = exports.PropertyLevel = exports.CopyBehavior = exports.NumberFormat = void 0;\nvar NumberFormat;\n(function (NumberFormat) {\n NumberFormat[\"Currency\"] = \"currency\";\n NumberFormat[\"Percent\"] = \"percent\";\n NumberFormat[\"Integer\"] = \"integer\";\n NumberFormat[\"Decimal\"] = \"decimal\";\n NumberFormat[\"Duration\"] = \"duration\";\n})(NumberFormat = exports.NumberFormat || (exports.NumberFormat = {}));\nvar CopyBehavior;\n(function (CopyBehavior) {\n CopyBehavior[\"Clear\"] = \"clear\";\n CopyBehavior[\"Copy\"] = \"copy\";\n CopyBehavior[\"Default\"] = \"default\";\n})(CopyBehavior = exports.CopyBehavior || (exports.CopyBehavior = {}));\nvar PropertyLevel;\n(function (PropertyLevel) {\n PropertyLevel[\"FAMILY\"] = \"family\";\n PropertyLevel[\"OPTION\"] = \"option\";\n PropertyLevel[\"OVERRIDABLE\"] = \"overridable\";\n PropertyLevel[\"ALL\"] = \"all\";\n})(PropertyLevel = exports.PropertyLevel || (exports.PropertyLevel = {}));\nvar TypePropertySortOrder;\n(function (TypePropertySortOrder) {\n TypePropertySortOrder[\"ASCENDING\"] = \"asc\";\n TypePropertySortOrder[\"DESCENDING\"] = \"desc\";\n TypePropertySortOrder[\"LIST_ORDER_ASCENDING\"] = \"list_order_asc\";\n TypePropertySortOrder[\"LIST_ORDER_DESCENDING\"] = \"list_order_desc\";\n})(TypePropertySortOrder = exports.TypePropertySortOrder || (exports.TypePropertySortOrder = {}));\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./property-types\"), exports);\n__exportStar(require(\"./type-property\"), exports);\n__exportStar(require(\"./size-range/size-range\"), exports);\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.formatNumber = void 0;\nconst type_properties_1 = require(\"../type-properties\");\nconst formatNumber = (value, numberFormat = { format: type_properties_1.NumberFormat.Decimal }, localizationConfig = {\n currency: 'USD',\n locale: 'en-US',\n}) => {\n if (!value && value !== 0) {\n return value;\n }\n let val = value;\n try {\n val = parseFloat(val);\n }\n catch (e) {\n console.log(`ERROR: Non number value ${value} in PropertyValueFormatter.formatNumber`);\n }\n const options = {};\n if (numberFormat.precision !== null) {\n options.maximumFractionDigits = numberFormat.precision;\n options.minimumFractionDigits = numberFormat.precision;\n }\n if (numberFormat.format === type_properties_1.NumberFormat.Currency) {\n options.style = 'currency';\n options.currency =\n numberFormat.currency || localizationConfig.currency || localizationConfig.currencyCode || 'USD';\n val = value[options.currency] || value[options.currency.toLowerCase()] || val;\n }\n if (numberFormat.format === type_properties_1.NumberFormat.Percent) {\n options.style = 'percent';\n }\n return new Intl.NumberFormat(localizationConfig.locale, options).format(val);\n};\nexports.formatNumber = formatNumber;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.formatSizeRange = void 0;\nconst formatSizeRange = (object) => {\n if (!object || !object.hasOwnProperty('sizes')) {\n return '';\n }\n let display = '';\n if (Array.isArray(object.sizes) && object.sizes.length > 0) {\n display = object.sizes?.join(' | ');\n }\n else {\n const keys = Object.keys(object.sizes);\n if (!keys || keys.length === 0) {\n return display;\n }\n keys.forEach((size2) => {\n object.sizes[size2]?.forEach((size1) => {\n display += (display !== '' ? ' | ' : '') + size2 + ' x ' + size1;\n });\n });\n }\n return display;\n};\nexports.formatSizeRange = formatSizeRange;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.PropertyValueFormatter = void 0;\nconst type_properties_1 = require(\"../type-properties\");\nconst formatNumber_1 = require(\"./formatNumber\");\nconst formatSizeRange_1 = require(\"./formatSizeRange\");\nclass PropertyValueFormatter {\n constructor() {\n this.localizationConfig = {\n currencyCode: 'USD',\n locale: 'en-US',\n };\n }\n setLocalConfig(config) {\n if (!config) {\n return;\n }\n this.localizationConfig = Object.assign(this.localizationConfig, config);\n }\n getDisplayValue(obj, property) {\n if (!obj || !property || obj[property.slug] === null || obj[property.slug] === undefined) {\n return '';\n }\n const value = obj[property.slug];\n return this.formatValueForProperty(value, property);\n }\n formatValueForProperty(value, property) {\n if ((!value && value !== 0) || !property) {\n if (property?.propertyType === 'boolean') {\n return this.formatBoolean(value);\n }\n if (value === null || value === undefined || !property) {\n return '';\n }\n }\n const isItemObjectReference = Boolean(property.propertyType === type_properties_1.PropertyType.ObjectReference && property.referencedTypeRootSlug === 'item');\n if (isItemObjectReference) {\n return this.formatItemObjectReference(value, property);\n }\n if (property.propertyType === type_properties_1.PropertyType.SingleSelect) {\n return this.formatOptionValue(value, property);\n }\n else if (property.propertyType === type_properties_1.PropertyType.MultiSelect) {\n return this.formatMultiSelectValue(value, property);\n }\n else {\n return this.formatValue(value, property.propertyType, property.numberFormat, property.dateFormat);\n }\n }\n formatItemObjectReference(item, property) {\n if (!item) {\n return '';\n }\n const isItemOptionProperty = property.slug === 'itemOption';\n const isOptionReference = property.referencedTypeRole === 'option';\n if (isItemOptionProperty) {\n return item.optionName || item.name;\n }\n if (isOptionReference) {\n return `${item.name} - ${item.optionName || item.name}`;\n }\n return item.name;\n }\n formatMultiSelectValue(value, property) {\n if (!Array.isArray(value)) {\n return this.formatOptionValue(value, property);\n }\n let displayValue = '';\n value.forEach((optionVal) => {\n displayValue = displayValue + this.formatOptionValue(optionVal, property) + ', ';\n });\n if (displayValue.endsWith(', ')) {\n displayValue = displayValue.substr(0, displayValue.length - 2);\n }\n return displayValue;\n }\n formatOptionValue(value, property) {\n if (!property.options || !value || !property) {\n return '';\n }\n let display = '';\n property.options.map((opt) => {\n if (opt.value === value) {\n display = opt.display;\n }\n });\n return display;\n }\n formatValue(value, propertyType, numberFormat, dateFormat = { includeTime: false }) {\n let formattedValue = value;\n switch (propertyType) {\n case type_properties_1.PropertyType.Currency: {\n formattedValue = (0, formatNumber_1.formatNumber)(value, numberFormat || { format: type_properties_1.NumberFormat.Currency }, this.localizationConfig);\n break;\n }\n case type_properties_1.PropertyType.Percent: {\n formattedValue = (0, formatNumber_1.formatNumber)(value, numberFormat || { format: type_properties_1.NumberFormat.Percent }, this.localizationConfig);\n break;\n }\n case type_properties_1.PropertyType.Number: {\n formattedValue = (0, formatNumber_1.formatNumber)(value, numberFormat || { format: type_properties_1.NumberFormat.Decimal }, this.localizationConfig);\n break;\n }\n case type_properties_1.PropertyType.Formula: {\n formattedValue = (0, formatNumber_1.formatNumber)(value, numberFormat || { format: type_properties_1.NumberFormat.Decimal }, this.localizationConfig);\n break;\n }\n case type_properties_1.PropertyType.Boolean: {\n formattedValue = this.formatBoolean(value);\n break;\n }\n case type_properties_1.PropertyType.Date: {\n formattedValue = this.formatDate(value, dateFormat);\n break;\n }\n case type_properties_1.PropertyType.ObjectReference: {\n formattedValue = this.formatObjectReference(value);\n break;\n }\n case type_properties_1.PropertyType.SizeRange: {\n formattedValue = (0, formatSizeRange_1.formatSizeRange)(value);\n break;\n }\n case type_properties_1.PropertyType.UserList: {\n formattedValue = this.formatUserList(value);\n break;\n }\n case type_properties_1.PropertyType.TypeReference: {\n formattedValue = this.formatTypeReference(value);\n break;\n }\n }\n return formattedValue;\n }\n formatCurrencyValue(value) {\n return (0, formatNumber_1.formatNumber)(value, { format: type_properties_1.NumberFormat.Currency }, this.localizationConfig);\n }\n formatDate(date, dateFormatOptions = { includeTime: false }) {\n if (dateFormatOptions?.includeTime) {\n return this.formatDateTime(date, dateFormatOptions);\n }\n if (!date || (typeof date === 'object' && !this.isValidDateObject(date))) {\n return '';\n }\n if (typeof date === 'object') {\n date = date.toISOString();\n }\n const options = {\n year: 'numeric',\n month: '2-digit',\n day: '2-digit',\n timeZone: 'UTC',\n };\n return new Intl.DateTimeFormat(this.localizationConfig.locale, options).format(new Date(date).getTime());\n }\n formatDateTime(date, dateFormatOptions = { includeTime: false }) {\n if (!date) {\n return '';\n }\n if (typeof date === 'object') {\n date = '' + date;\n }\n const options = {\n hour: 'numeric',\n minute: 'numeric',\n second: 'numeric',\n year: 'numeric',\n month: '2-digit',\n day: '2-digit',\n };\n return new Intl.DateTimeFormat(this.localizationConfig.locale, options).format(new Date(date).getTime());\n }\n getIsoDatePart(date) {\n let d = new Date(date), month = '' + (d.getMonth() + 1), day = '' + d.getDate(), year = d.getFullYear();\n if (month.length < 2)\n month = '0' + month;\n if (day.length < 2)\n day = '0' + day;\n return [year, month, day].join('-');\n }\n formatBoolean(value) {\n if (value) {\n return 'Yes';\n }\n else {\n return 'No';\n }\n }\n formatObjectReference(object) {\n const objectName = object?.optionName || object?.name || '';\n return objectName;\n }\n formatTypeReference(object) {\n const label = object?.label || object?.typePath || '';\n return label;\n }\n formatUserList(object) {\n const email = object?.email || '';\n return email;\n }\n formatValueWithPrecision(value, property) {\n const isEmpty = Boolean(value === undefined || value === null || (typeof value === 'number' && Number.isNaN(value)));\n if (isEmpty) {\n return null;\n }\n if (!this.hasPrecisionToEnforceOnProperty(value, property)) {\n return value;\n }\n const precision = property.numberFormat?.precision;\n if (property.numberFormat?.format === type_properties_1.NumberFormat.Percent) {\n const percentAdjustedPrecision = precision + 2;\n return parseFloat(value.toFixed(percentAdjustedPrecision));\n }\n return parseFloat(value.toFixed(precision));\n }\n hasPrecisionToEnforceOnProperty(value, property) {\n const precision = property.numberFormat?.precision;\n const numericPropertyTypes = [\n type_properties_1.PropertyType.Currency,\n type_properties_1.PropertyType.Number,\n type_properties_1.PropertyType.Percent,\n type_properties_1.PropertyType.Formula,\n ];\n return Boolean(property.propertyType &&\n numericPropertyTypes.includes(property.propertyType) &&\n typeof precision === 'number' &&\n typeof value === 'number');\n }\n parseValue(value, typeProperty) {\n let parsedValue = value;\n if (!value || !typeProperty) {\n parsedValue = '';\n }\n switch (typeProperty.propertyType) {\n case type_properties_1.PropertyType.Number: {\n parsedValue = this.parseNumberValue(value);\n break;\n }\n case type_properties_1.PropertyType.Currency: {\n parsedValue = this.parseCurrencyValue(value);\n break;\n }\n case type_properties_1.PropertyType.Percent: {\n parsedValue = this.parsePercentValue(value);\n break;\n }\n case type_properties_1.PropertyType.Boolean: {\n parsedValue = this.parseBooleanValue(value);\n break;\n }\n case type_properties_1.PropertyType.SingleSelect: {\n parsedValue = this.parseOptionValue(value, typeProperty);\n break;\n }\n case type_properties_1.PropertyType.MultiSelect: {\n parsedValue = this.parseMultiOptionValues(value, typeProperty);\n break;\n }\n case type_properties_1.PropertyType.Date: {\n parsedValue = this.parseDate(value);\n break;\n }\n }\n return parsedValue;\n }\n parseNumberValue(value) {\n const parsedValue = Number(value.replace(/[^0-9.-]+/g, ''));\n return parsedValue;\n }\n parseCurrencyValue(value) {\n const parsedValue = Number(value.replace(/[^0-9.-]+/g, ''));\n return parsedValue;\n }\n parsePercentValue(value) {\n let parsedValue = Number(value.replace(/[^0-9.-]+/g, ''));\n parsedValue = parsedValue / 100;\n return parsedValue;\n }\n parseBooleanValue(value) {\n if (value.toUpperCase() === 'FALSE' ||\n value.toUpperCase() === 'NO' ||\n value.trim() === '' ||\n value.trim() === 'undefined') {\n return false;\n }\n else if (value.toUpperCase() === 'TRUE' || value.toUpperCase() === 'YES') {\n return true;\n }\n return false;\n }\n parseOptionValue(display, typeProperty) {\n if (!display) {\n return '';\n }\n if (!typeProperty.options || !typeProperty) {\n return display;\n }\n let optionValue = display;\n typeProperty.options.map((opt) => {\n if (opt.display === display && !opt.disabled) {\n optionValue = opt.value;\n }\n });\n return optionValue;\n }\n parseMultiOptionValues(display, typeProperty) {\n if (!display) {\n return '';\n }\n if (!typeProperty.options || !typeProperty) {\n return display;\n }\n const values = display.split(',');\n const parsedValues = [];\n values.forEach((value) => {\n const parsedValue = this.parseMultiOptionValue(value.trim(), typeProperty);\n if (parsedValue) {\n parsedValues.push(parsedValue);\n }\n });\n return parsedValues;\n }\n parseMultiOptionValue(display, typeProperty) {\n if (!display) {\n return null;\n }\n if (!typeProperty.options || !typeProperty) {\n return null;\n }\n for (const opt of typeProperty.options) {\n if (opt.display === display && !opt.disabled) {\n return opt.value;\n }\n }\n return null;\n }\n parseDate(value) {\n let formatted = '';\n if (this.isIsoDate(value)) {\n formatted = value.substring(0, value.indexOf('T'));\n }\n else {\n const date = new Date(value);\n formatted = this.getIsoDatePart(date);\n }\n const utcIso = formatted + 'T00:00:00.000Z';\n return utcIso;\n }\n isIsoDate(value) {\n if (!/\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}.\\d{3}Z/.test(value)) {\n return false;\n }\n const date = new Date(value);\n return date.toISOString() === value;\n }\n isValidDateObject(value) {\n return value && value instanceof Date && !isNaN(value.getTime());\n }\n}\nexports.PropertyValueFormatter = PropertyValueFormatter;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./property-value-formatter\"), exports);\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./type-property-policy\"), exports);\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./type\"), exports);\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./type-interface\"), exports);\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./type-root\"), exports);\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.parseOptionSet = exports.parseOptionSets = void 0;\nconst util_1 = require(\"@contrail/util\");\nfunction parseOptionSets(csvData) {\n const valuesByFieldName = {};\n for (const row of csvData) {\n for (const [key, value] of Object.entries(row)) {\n if (!valuesByFieldName[key]) {\n valuesByFieldName[key] = new Set();\n }\n if (!value) {\n continue;\n }\n if (!valuesByFieldName[key]) {\n valuesByFieldName[key] = new Set();\n }\n valuesByFieldName[key].add(value);\n }\n }\n const reducedOptionSets = [];\n for (const [key, value] of Object.entries(valuesByFieldName)) {\n const optionSet = [];\n for (const entry of value.values()) {\n optionSet.push({\n value: util_1.StringUtil.convertToCamelCase(entry),\n display: entry,\n });\n }\n const reducedOptionSet = {\n name: key,\n isArchived: false,\n optionSet,\n };\n reducedOptionSets.push(reducedOptionSet);\n }\n return reducedOptionSets;\n}\nexports.parseOptionSets = parseOptionSets;\nfunction parseOptionSet(columnName, values) {\n const optionSet = [];\n if (values) {\n for (const entry of values.values()) {\n optionSet.push({\n value: util_1.StringUtil.convertToCamelCase(entry),\n display: entry,\n });\n }\n }\n const reducedOptionSet = {\n name: columnName,\n isArchived: false,\n optionSet,\n };\n return reducedOptionSet;\n}\nexports.parseOptionSet = parseOptionSet;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.GetBooleanProperty = exports.GetTextProperty = exports.GetStringProperty = exports.GetDateProperty = exports.GetCurrencyProperty = exports.GetPercentProperty = exports.GetNumberProperty = exports.GetOptionSetProperty = exports.GetLevel = void 0;\nconst util_1 = require(\"@contrail/util\");\nconst type_properties_1 = require(\"../type-properties\");\nfunction GetLevel(level) {\n if (level === 'Family') {\n return 'family';\n }\n else if (level === 'Option') {\n return 'option';\n }\n else if (level === 'Overridable') {\n return 'overridable';\n }\n else if (level === 'All') {\n return 'all';\n }\n return undefined;\n}\nexports.GetLevel = GetLevel;\nfunction GetOptionSetProperty(key, isSingleSelect = true, editable = false, level = null, optionSetName = 'Not Passed', propertyKey = null) {\n const typePropertyOptionSetName = optionSetName === 'Not Passed' ? key : optionSetName;\n const reducedTypeProperty = {\n slug: propertyKey ? propertyKey : util_1.StringUtil.convertToCamelCase(key),\n label: key,\n propertyType: isSingleSelect ? type_properties_1.PropertyType.SingleSelect : type_properties_1.PropertyType.MultiSelect,\n typePropertyOptionSetName: typePropertyOptionSetName,\n isArchived: false,\n editable: editable,\n core: false,\n inherited: false,\n propertyLevel: GetLevel(level),\n };\n return reducedTypeProperty;\n}\nexports.GetOptionSetProperty = GetOptionSetProperty;\nfunction GetNumberProperty(key, precision = 0, editable = false, level = null, propertyKey = null) {\n const reducedTypeProperty = {\n slug: propertyKey ? propertyKey : util_1.StringUtil.convertToCamelCase(key),\n label: key,\n propertyType: type_properties_1.PropertyType.Number,\n isArchived: false,\n editable: editable,\n core: false,\n inherited: false,\n numberFormat: {\n format: precision === 0 ? 'integer' : 'decimal',\n precision: precision,\n },\n propertyLevel: GetLevel(level),\n };\n return reducedTypeProperty;\n}\nexports.GetNumberProperty = GetNumberProperty;\nfunction GetPercentProperty(key, precision = 0, editable = false, level = null, propertyKey = null) {\n const reducedTypeProperty = {\n slug: propertyKey ? propertyKey : util_1.StringUtil.convertToCamelCase(key),\n label: key,\n propertyType: type_properties_1.PropertyType.Percent,\n isArchived: false,\n editable: editable,\n core: false,\n inherited: false,\n numberFormat: {\n format: 'percent',\n precision: precision,\n },\n propertyLevel: GetLevel(level),\n };\n return reducedTypeProperty;\n}\nexports.GetPercentProperty = GetPercentProperty;\nfunction GetCurrencyProperty(key, precision = 0, editable = false, level = null, propertyKey = null) {\n const reducedTypeProperty = {\n slug: propertyKey ? propertyKey : util_1.StringUtil.convertToCamelCase(key),\n label: key,\n propertyType: type_properties_1.PropertyType.Currency,\n isArchived: false,\n editable: editable,\n core: false,\n inherited: false,\n numberFormat: {\n format: 'currency',\n precision: precision,\n },\n propertyLevel: GetLevel(level),\n };\n return reducedTypeProperty;\n}\nexports.GetCurrencyProperty = GetCurrencyProperty;\nfunction GetDateProperty(key, editable = false, level = null, propertyKey = null) {\n const reducedTypeProperty = {\n slug: propertyKey ? propertyKey : util_1.StringUtil.convertToCamelCase(key),\n label: key,\n propertyType: type_properties_1.PropertyType.Date,\n isArchived: false,\n editable: editable,\n core: false,\n inherited: false,\n propertyLevel: GetLevel(level),\n };\n return reducedTypeProperty;\n}\nexports.GetDateProperty = GetDateProperty;\nfunction GetStringProperty(key, editable = false, level = null, propertyKey = null) {\n const reducedTypeProperty = {\n slug: propertyKey ? propertyKey : util_1.StringUtil.convertToCamelCase(key),\n label: key,\n propertyType: type_properties_1.PropertyType.String,\n isArchived: false,\n editable: editable,\n core: false,\n inherited: false,\n propertyLevel: GetLevel(level),\n };\n return reducedTypeProperty;\n}\nexports.GetStringProperty = GetStringProperty;\nfunction GetTextProperty(key, editable = false, level = null, propertyKey = null) {\n const reducedTypeProperty = {\n slug: propertyKey ? propertyKey : util_1.StringUtil.convertToCamelCase(key),\n label: key,\n propertyType: type_properties_1.PropertyType.Text,\n isArchived: false,\n editable: editable,\n core: false,\n inherited: false,\n propertyLevel: GetLevel(level),\n };\n return reducedTypeProperty;\n}\nexports.GetTextProperty = GetTextProperty;\nfunction GetBooleanProperty(key, editable = false, level = null, propertyKey = null) {\n const reducedTypeProperty = {\n slug: propertyKey ? propertyKey : util_1.StringUtil.convertToCamelCase(key),\n label: key,\n propertyType: type_properties_1.PropertyType.Boolean,\n isArchived: false,\n editable: editable,\n core: false,\n inherited: false,\n propertyLevel: GetLevel(level),\n };\n return reducedTypeProperty;\n}\nexports.GetBooleanProperty = GetBooleanProperty;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.GetSuggestedTypes = exports.GetTypesFromTemplateWithOptionSetsFromData = exports.GetTypesFromTemplate = void 0;\nconst parse_optionSet_1 = require(\"./parse-optionSet\");\nconst type_creation_helper_1 = require(\"./type-creation-helper\");\nclass TypeValueSummary {\n}\nfunction GetTypesFromTemplate(typeRows, dataForOptionSets) {\n const optionSetNamesAndValues = {};\n for (const row of dataForOptionSets) {\n const key = row['Option Set Name'];\n const value = row['Label'];\n if (!optionSetNamesAndValues[key]) {\n optionSetNamesAndValues[key] = new Set();\n }\n optionSetNamesAndValues[key].add(value);\n }\n console.log('Data recieved for: ', Object.keys(optionSetNamesAndValues));\n console.log('Sorted data by column completed.');\n const reducedTypePropertiesByEntity = {};\n reducedTypePropertiesByEntity['Plan-Placeholder'] = [];\n const reducedOptionSets = [];\n for (const optionSetName of Object.keys(optionSetNamesAndValues)) {\n console.log('Creating OptionSet for: ', optionSetName);\n const optionSet = (0, parse_optionSet_1.parseOptionSet)(optionSetName, optionSetNamesAndValues[optionSetName]);\n reducedOptionSets.push(optionSet);\n }\n console.log('Creating TypeProperties and OptionSets');\n for (const typeRow of typeRows) {\n const propertyLabel = typeRow['Property Label*'];\n const propertyKey = typeRow['Property Key(VIBE to enter)'];\n const propertyType = typeRow['Property Type*'];\n const entity = typeRow['Entity*'];\n const level = typeRow['Level*'];\n const isCore = typeRow['Vibe oob Property?'];\n const formula = typeRow['Formula(for Formula types)'];\n const optionSetName = typeRow['Option Set Name(for Single and Multi Select types)'];\n const editable = [false, 'false', 'False', '', 'no', 'No'].includes(typeRow['Editable?']) ? false : true;\n let precision = typeRow['Decimals(for #, %, $ types)'];\n if (precision && precision.length > 1) {\n precision = precision.charAt(0);\n }\n if (isCore || !propertyType || !propertyLabel) {\n console.log('Skipping: ' + propertyLabel);\n continue;\n }\n console.log('Creating TypeProperty for: ', propertyLabel);\n let reducedTypeProperty;\n if (propertyType === 'Number') {\n console.log('Creating Number TypeProperty');\n reducedTypeProperty = (0, type_creation_helper_1.GetNumberProperty)(propertyLabel, precision, editable, level, propertyKey);\n }\n else if (propertyType === 'Percent') {\n console.log('Creating Percent TypeProperty');\n reducedTypeProperty = (0, type_creation_helper_1.GetPercentProperty)(propertyLabel, precision, editable, level, propertyKey);\n }\n else if (propertyType === 'Currency') {\n console.log('Creating Currency TypeProperty');\n reducedTypeProperty = (0, type_creation_helper_1.GetCurrencyProperty)(propertyLabel, precision, editable, level, propertyKey);\n }\n else if (propertyType === 'Date') {\n console.log('Creating Date TypeProperty');\n reducedTypeProperty = (0, type_creation_helper_1.GetDateProperty)(propertyLabel, editable, level, propertyKey);\n }\n else if (propertyType === 'Boolean') {\n console.log('Creating Boolean TypeProperty');\n reducedTypeProperty = (0, type_creation_helper_1.GetBooleanProperty)(propertyLabel, editable, level, propertyKey);\n }\n else if (propertyType === 'Single Select') {\n console.log('Creating SingleSelect TypeProperty');\n reducedTypeProperty = (0, type_creation_helper_1.GetOptionSetProperty)(propertyLabel, true, editable, level, optionSetName, propertyKey);\n }\n else if (propertyType === 'Multi Select') {\n console.log('Creating MultiSelect TypeProperty');\n reducedTypeProperty = (0, type_creation_helper_1.GetOptionSetProperty)(propertyLabel, false, editable, level, optionSetName, propertyKey);\n }\n else if (propertyType === 'String') {\n console.log('Creating String TypeProperty');\n reducedTypeProperty = (0, type_creation_helper_1.GetStringProperty)(propertyLabel, editable, level, propertyKey);\n }\n else if (propertyType === 'Text') {\n console.log('Creating Text TypeProperty');\n reducedTypeProperty = (0, type_creation_helper_1.GetTextProperty)(propertyLabel, editable, level, propertyKey);\n }\n else {\n console.log(`Skipping: ${propertyLabel}. There is no matching type for ${propertyType}`);\n continue;\n }\n if (!reducedTypePropertiesByEntity[entity]) {\n reducedTypePropertiesByEntity[entity] = [];\n }\n reducedTypePropertiesByEntity[entity].push(JSON.parse(JSON.stringify(reducedTypeProperty)));\n reducedTypePropertiesByEntity['Plan-Placeholder'].push(JSON.parse(JSON.stringify(reducedTypeProperty)));\n }\n return {\n TypePropertiesByEntity: reducedTypePropertiesByEntity,\n OptionSets: reducedOptionSets,\n };\n}\nexports.GetTypesFromTemplate = GetTypesFromTemplate;\nfunction GetTypesFromTemplateWithOptionSetsFromData(typeRows, data) {\n const valuesByFieldName = {};\n for (const row of data) {\n for (const [key, value] of Object.entries(row)) {\n if (!value) {\n continue;\n }\n if (!valuesByFieldName[key]) {\n valuesByFieldName[key] = { count: 0, values: new Set() };\n }\n valuesByFieldName[key].values.add(value);\n valuesByFieldName[key].count += 1;\n }\n }\n console.log('Data recieved for: ', Object.keys(valuesByFieldName));\n console.log('Sorted data by column completed.');\n const reducedTypePropertiesByEntity = {};\n reducedTypePropertiesByEntity['Plan-Placeholder'] = [];\n const reducedOptionSets = [];\n console.log('Creating TypeProperties and OptionSets');\n for (const typeRow of typeRows) {\n const propertyLabel = typeRow['Property Label*'];\n const propertyKey = typeRow['Property Key(VIBE to enter)'];\n const propertyType = typeRow['Property Type*'];\n const entity = typeRow['Entity*'];\n const level = typeRow['Level*'];\n const isCore = typeRow['Vibe oob Property?'];\n const formula = typeRow['Formula(for Formula types)'];\n const optionSetName = typeRow['Option Set Name(for Single and Multi Select types)'];\n const editable = [false, 'false', 'False', '', 'no', 'No'].includes(typeRow['Editable?']) ? false : true;\n let precision = typeRow['Decimals(for #, %, $ types)'];\n if (precision && precision.length > 1) {\n precision = precision.charAt(0);\n }\n if (isCore || !propertyType || !propertyLabel) {\n console.log('Skipping: ' + propertyLabel);\n continue;\n }\n console.log('Creating TypeProperty for: ', propertyLabel);\n let reducedTypeProperty;\n if (propertyType === 'Number') {\n console.log('Creating Number TypeProperty');\n reducedTypeProperty = (0, type_creation_helper_1.GetNumberProperty)(propertyLabel, precision, editable, level, propertyKey);\n }\n else if (propertyType === 'Percent') {\n console.log('Creating Percent TypeProperty');\n reducedTypeProperty = (0, type_creation_helper_1.GetPercentProperty)(propertyLabel, precision, editable, level, propertyKey);\n }\n else if (propertyType === 'Currency') {\n console.log('Creating Currency TypeProperty');\n reducedTypeProperty = (0, type_creation_helper_1.GetCurrencyProperty)(propertyLabel, precision, editable, level, propertyKey);\n }\n else if (propertyType === 'Date') {\n console.log('Creating Date TypeProperty');\n reducedTypeProperty = (0, type_creation_helper_1.GetDateProperty)(propertyLabel, editable, level, propertyKey);\n }\n else if (propertyType === 'Boolean') {\n console.log('Creating Boolean TypeProperty');\n reducedTypeProperty = (0, type_creation_helper_1.GetBooleanProperty)(propertyLabel, editable, level, propertyKey);\n }\n else if (propertyType === 'Single Select') {\n console.log('Creating SingleSelect TypeProperty');\n reducedTypeProperty = (0, type_creation_helper_1.GetOptionSetProperty)(propertyLabel, true, editable, level, propertyLabel, propertyKey);\n const optionSet = (0, parse_optionSet_1.parseOptionSet)(propertyLabel, valuesByFieldName[propertyLabel]?.values);\n reducedOptionSets.push(optionSet);\n }\n else if (propertyType === 'Multi Select') {\n console.log('Creating MultiSelect TypeProperty');\n reducedTypeProperty = (0, type_creation_helper_1.GetOptionSetProperty)(propertyLabel, false, editable, level, propertyLabel, propertyKey);\n const optionSet = (0, parse_optionSet_1.parseOptionSet)(propertyLabel, valuesByFieldName[propertyLabel]?.values);\n reducedOptionSets.push(optionSet);\n }\n else if (propertyType === 'String') {\n console.log('Creating String TypeProperty');\n reducedTypeProperty = (0, type_creation_helper_1.GetStringProperty)(propertyLabel, editable, level, propertyKey);\n }\n else if (propertyType === 'Text') {\n console.log('Creating Text TypeProperty');\n reducedTypeProperty = (0, type_creation_helper_1.GetTextProperty)(propertyLabel, editable, level, propertyKey);\n }\n else {\n console.log(`Skipping: ${propertyLabel}. There is no matching type for ${propertyType}`);\n continue;\n }\n if (!reducedTypePropertiesByEntity[entity]) {\n reducedTypePropertiesByEntity[entity] = [];\n }\n reducedTypePropertiesByEntity[entity].push(JSON.parse(JSON.stringify(reducedTypeProperty)));\n reducedTypePropertiesByEntity['Plan-Placeholder'].push(JSON.parse(JSON.stringify(reducedTypeProperty)));\n }\n return {\n TypePropertiesByEntity: reducedTypePropertiesByEntity,\n OptionSets: reducedOptionSets,\n };\n}\nexports.GetTypesFromTemplateWithOptionSetsFromData = GetTypesFromTemplateWithOptionSetsFromData;\nfunction GetSuggestedTypes(data) {\n const valuesByFieldName = {};\n for (const row of data) {\n for (const [key, value] of Object.entries(row)) {\n if (!value) {\n continue;\n }\n if (!valuesByFieldName[key]) {\n valuesByFieldName[key] = { count: 0, values: new Set() };\n }\n valuesByFieldName[key].values.add(value);\n valuesByFieldName[key].count += 1;\n }\n }\n console.log('Sorted data by column completed.');\n const reducedTypeProperties = [];\n const reducedOptionSets = [];\n console.log('Creating TypeProperties and OptionSets');\n for (const [key, typeValueSummary] of Object.entries(valuesByFieldName)) {\n console.log('Creating TypeProperty for: ', key);\n const totalValueCount = typeValueSummary.count;\n const uniqueValues = typeValueSummary.values.size;\n const valueRatio = uniqueValues / totalValueCount;\n let isNumber;\n let isCurrency;\n let isString;\n let isDate;\n let isBoolean;\n for (const entry of typeValueSummary.values.values()) {\n if (!entry) {\n continue;\n }\n const num = Number(entry);\n if (!isNaN(num)) {\n if (entry.includes('.')) {\n isCurrency = true;\n }\n else {\n isNumber = true;\n }\n }\n else if (!isNaN(Date.parse(entry))) {\n isDate = true;\n }\n else if (entry.toLocaleLowerCase() === 'true' || entry.toLocaleLowerCase() === 'false') {\n isBoolean = true;\n }\n else {\n isString = true;\n }\n }\n let reducedTypeProperty;\n if (isNumber && !isCurrency && !isString && !isDate && !isBoolean) {\n console.log('Creating Number TypeProperty');\n reducedTypeProperty = (0, type_creation_helper_1.GetNumberProperty)(key);\n }\n else if (!isNumber && isCurrency && !isString && !isDate && !isBoolean) {\n console.log('Creating Currency TypeProperty');\n reducedTypeProperty = (0, type_creation_helper_1.GetCurrencyProperty)(key);\n }\n else if (isNumber && isCurrency && !isString && !isDate && !isBoolean) {\n console.log('Mixed numbers and currencies - Creating Currency TypeProperty');\n reducedTypeProperty = (0, type_creation_helper_1.GetCurrencyProperty)(key);\n }\n else if (!isNumber && !isCurrency && !isString && isDate && !isBoolean) {\n console.log('Creating Date TypeProperty');\n reducedTypeProperty = (0, type_creation_helper_1.GetDateProperty)(key);\n }\n else if (!isNumber && !isCurrency && !isString && !isDate && isBoolean) {\n console.log('Creating Boolean TypeProperty');\n reducedTypeProperty = (0, type_creation_helper_1.GetBooleanProperty)(key);\n }\n else if (!isNumber && !isCurrency && isString && !isDate && !isBoolean) {\n if (valueRatio < 0.4) {\n console.log('Creating SingleSelect TypeProperty and OptionSet');\n reducedTypeProperty = (0, type_creation_helper_1.GetOptionSetProperty)(key);\n const optionSet = (0, parse_optionSet_1.parseOptionSet)(key, typeValueSummary.values);\n reducedOptionSets.push(optionSet);\n }\n else {\n console.log('Creating String TypeProperty');\n reducedTypeProperty = (0, type_creation_helper_1.GetStringProperty)(key);\n }\n }\n else {\n if (valueRatio < 0.4) {\n console.log('Mixed Values - Creating SingleSelect TypeProperty and OptionSet');\n reducedTypeProperty = (0, type_creation_helper_1.GetOptionSetProperty)(key);\n const optionSet = (0, parse_optionSet_1.parseOptionSet)(key, typeValueSummary.values);\n reducedOptionSets.push(optionSet);\n }\n else {\n console.log('Mixed Values - Creating String TypeProperty');\n reducedTypeProperty = (0, type_creation_helper_1.GetStringProperty)(key);\n }\n }\n reducedTypeProperties.push(reducedTypeProperty);\n }\n return {\n TypeProperties: reducedTypeProperties,\n OptionSets: reducedOptionSets,\n };\n}\nexports.GetSuggestedTypes = GetSuggestedTypes;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./interfaces\"), exports);\n__exportStar(require(\"./parse-optionSet\"), exports);\n__exportStar(require(\"./process-orchestrator\"), exports);\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.OptionSetHierarchyHelper = void 0;\nclass OptionSetHierarchyHelper {\n static computeFullOptionSetHierchy(optionSets, widthLimit = -1) {\n const hierarchy = {\n hierarchy: [],\n options: [],\n maxDepth: 0,\n };\n hierarchy.maxDepth = optionSets.length;\n hierarchy.hierarchy = optionSets.map((o) => o.id);\n hierarchy.options = this.generateAllOptionDefinitions(optionSets, widthLimit);\n return hierarchy;\n }\n static generateAllOptionDefinitions(optionSets, widthLimit = -1) {\n if (optionSets.length < 1) {\n return;\n }\n const optionDefinitions = [];\n let nextOptionSet = optionSets[0];\n const valuesToInclude = widthLimit > 0 ? widthLimit : nextOptionSet.optionSet.length;\n for (let i = 0; i < valuesToInclude; i++) {\n const option = nextOptionSet.optionSet[i];\n const optionObject = {\n value: option.value,\n };\n if (optionSets.length > 1) {\n const childrenOptionSets = optionSets.slice(1, optionSets.length);\n optionObject.options = this.generateAllOptionDefinitions(childrenOptionSets, widthLimit);\n }\n optionDefinitions.push(optionObject);\n }\n return optionDefinitions;\n }\n}\nexports.OptionSetHierarchyHelper = OptionSetHierarchyHelper;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./option-set-hierarchy\"), exports);\n__exportStar(require(\"./option-set-hierarchy-helper\"), exports);\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./type-rules\"), exports);\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./type-policy\"), exports);\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.CopyHelper = exports.CopyMethodTypes = void 0;\nconst type_properties_1 = require(\"../type-properties\");\nconst formatter_1 = require(\"../formatter\");\nvar CopyMethodTypes;\n(function (CopyMethodTypes) {\n CopyMethodTypes[\"QUICK_COPY\"] = \"Quick Copy\";\n CopyMethodTypes[\"EXTENSION_COPY\"] = \"Extension Copy\";\n})(CopyMethodTypes = exports.CopyMethodTypes || (exports.CopyMethodTypes = {}));\nclass CopyHelper {\n static buildCopiesOfEntities(entitiesToCopy, typeMap, propertySlugsToIgnore = []) {\n const entityCopies = entitiesToCopy.map((entity) => this.buildCopyOfEntity(entity, typeMap, propertySlugsToIgnore));\n return entityCopies.filter((entity) => !!entity);\n }\n static buildCopyOfEntity(entityToCopy, typeMap, propertySlugsToIgnore = []) {\n if (!entityToCopy) {\n console.warn('Input entity does not have a type.');\n return;\n }\n const entityType = typeMap[entityToCopy?.typeId];\n if (!entityType || !entityType.typeProperties || !entityType.typePath) {\n console.warn('Entity type not found or has no properties.');\n return;\n }\n const rootType = entityType.typePath.split(':')[0];\n const isLeveledEntity = ['item', 'project-item'].includes(rootType);\n const isFamilyEntity = entityToCopy.roles?.includes('family');\n const isOptionEntity = entityToCopy.roles?.includes('option');\n const typeLevel = isFamilyEntity ? 'family' : isOptionEntity ? 'option' : null;\n if (isLeveledEntity && !typeLevel) {\n console.warn('Leveled entity does not have assigned role of \"family\" or \"option\".');\n return;\n }\n const validCopyPropertyTypes = [\n type_properties_1.PropertyType.Text,\n type_properties_1.PropertyType.String,\n type_properties_1.PropertyType.Number,\n type_properties_1.PropertyType.Currency,\n type_properties_1.PropertyType.Percent,\n type_properties_1.PropertyType.Date,\n type_properties_1.PropertyType.Boolean,\n type_properties_1.PropertyType.MultiSelect,\n type_properties_1.PropertyType.SingleSelect,\n type_properties_1.PropertyType.ObjectReference,\n type_properties_1.PropertyType.TypeReference,\n type_properties_1.PropertyType.UserList,\n type_properties_1.PropertyType.SizeRange,\n ];\n const propertiesToCopy = entityType.typeProperties.filter((property) => {\n const isConfiguredToCopy = property.copyBehavior === type_properties_1.CopyBehavior.Copy || !property.copyBehavior;\n const doesPropertyLevelMatch = !isLeveledEntity ||\n (property.propertyLevel && [typeLevel, 'overridable', 'all'].includes(property.propertyLevel));\n const isPropertyTypeCopyable = property.propertyType && validCopyPropertyTypes.includes(property.propertyType);\n return Boolean(isConfiguredToCopy && doesPropertyLevelMatch && isPropertyTypeCopyable && !property.isUniqueProperty);\n });\n const propertiesToDefault = entityType.typeProperties.filter((property) => {\n const isConfiguredToDefault = property.copyBehavior === type_properties_1.CopyBehavior.Default;\n const doesPropertyLevelMatch = !isLeveledEntity ||\n (property.propertyLevel && [typeLevel, 'overridable', 'all'].includes(property.propertyLevel));\n const isPropertyTypeCopyable = property.propertyType && validCopyPropertyTypes.includes(property.propertyType);\n return Boolean(isConfiguredToDefault && doesPropertyLevelMatch && isPropertyTypeCopyable && !property.isUniqueProperty);\n });\n const defaultPropertiesToIgnore = isLeveledEntity ? ['id', 'roles', 'specifiedId'] : ['id', 'specifiedId'];\n const propertiesToIgnore = [...new Set(...propertySlugsToIgnore, ...defaultPropertiesToIgnore)];\n const copy = {};\n propertiesToCopy.forEach((property) => {\n if (!propertiesToIgnore.includes(property.slug)) {\n copy[this.getTypePropertySlug(property)] = entityToCopy[this.getTypePropertySlug(property)];\n }\n });\n propertiesToDefault.forEach((property) => {\n if (!propertiesToIgnore.includes(property.slug)) {\n copy[this.getTypePropertySlug(property)] = this.getCastDefaultValue(property);\n }\n });\n this.assignCopyMetadata(copy, entityToCopy);\n return copy;\n }\n static assignCopyMetadata(copyOfEntity, entityToCopy) {\n copyOfEntity.createdFromId = entityToCopy.id;\n copyOfEntity.createMethod = CopyMethodTypes.QUICK_COPY;\n copyOfEntity.typeId = entityToCopy.typeId;\n if (entityToCopy.roles) {\n copyOfEntity.roles = entityToCopy.roles;\n }\n if (entityToCopy.workspaceId) {\n copyOfEntity.workspaceId = entityToCopy.workspaceId;\n }\n }\n static getTypePropertySlug(typeProperty) {\n const isReferenceProperty = Boolean(typeProperty.propertyType &&\n [type_properties_1.PropertyType.ObjectReference, type_properties_1.PropertyType.TypeReference, type_properties_1.PropertyType.UserList].includes(typeProperty.propertyType));\n return isReferenceProperty ? typeProperty.slug + 'Id' : typeProperty.slug;\n }\n static getCastDefaultValue(typeProperty) {\n if (typeProperty.propertyType === type_properties_1.PropertyType.Boolean) {\n return new formatter_1.PropertyValueFormatter().parseBooleanValue(typeProperty.copyDefault);\n }\n return typeProperty.copyDefault;\n }\n}\nexports.CopyHelper = CopyHelper;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./copy-helper\"), exports);\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./formatter\"), exports);\n__exportStar(require(\"./type-properties\"), exports);\n__exportStar(require(\"./type-property-policies\"), exports);\n__exportStar(require(\"./types\"), exports);\n__exportStar(require(\"./type-interfaces\"), exports);\n__exportStar(require(\"./type-roots\"), exports);\n__exportStar(require(\"./types-processor\"), exports);\n__exportStar(require(\"./type-option-set-hierarchies\"), exports);\n__exportStar(require(\"./type-rule-sets\"), exports);\n__exportStar(require(\"./type-policies\"), exports);\n__exportStar(require(\"./copy\"), exports);\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.areItemPropertyValuesEqual = exports.determineChangesIfEqual = exports.applyChangesIfEqual = void 0;\nconst types_1 = require(\"@contrail/types\");\nconst compareDeep_1 = require(\"../compareDeep/compareDeep\");\nfunction applyChangesIfEqual(target, priorSourceValues, newSourceValues, properties) {\n const changes = determineChangesIfEqual(target, priorSourceValues, newSourceValues, properties);\n if (changes) {\n Object.assign(target, changes);\n }\n}\nexports.applyChangesIfEqual = applyChangesIfEqual;\nfunction determineChangesIfEqual(target, priorSourceValues, newSourceValues, properties) {\n const changes = {};\n for (const property of properties) {\n const propertyKey = getPropertyKey(property);\n if (newSourceValues[propertyKey] === undefined) {\n continue;\n }\n if (areItemPropertyValuesEqual(property, priorSourceValues, target)) {\n changes[propertyKey] = newSourceValues[propertyKey];\n if ([types_1.PropertyType.ObjectReference, types_1.PropertyType.UserList, types_1.PropertyType.TypeReference].includes(property.propertyType)) {\n changes[property.slug] = newSourceValues[property.slug];\n }\n }\n }\n return changes;\n}\nexports.determineChangesIfEqual = determineChangesIfEqual;\nfunction areItemPropertyValuesEqual(property, itemOne, itemTwo) {\n var _a, _b, _c, _d;\n const propertyKey = getPropertyKey(property);\n const propertyValueOne = (_a = itemOne[propertyKey]) !== null && _a !== void 0 ? _a : null;\n const propertyValueTwo = (_b = itemTwo[propertyKey]) !== null && _b !== void 0 ? _b : null;\n if (property.propertyType === types_1.PropertyType.MultiSelect) {\n const propertyValueOneAsArray = getMultiSelectValueAsArray(propertyValueOne);\n const propertyValueTwoAsArray = getMultiSelectValueAsArray(propertyValueTwo);\n return areArraysEqualIgnoreOrder(propertyValueOneAsArray, propertyValueTwoAsArray);\n }\n if (property.propertyType === types_1.PropertyType.SizeRange) {\n const isOfSameSizeRangeTemplate = ((_c = itemOne === null || itemOne === void 0 ? void 0 : itemOne.sizeRangeTemplate) === null || _c === void 0 ? void 0 : _c.id) === ((_d = itemTwo === null || itemTwo === void 0 ? void 0 : itemTwo.sizeRangeTemplate) === null || _d === void 0 ? void 0 : _d.id);\n if (!isOfSameSizeRangeTemplate)\n return false;\n return areSizeRangesEqual(propertyValueOne, propertyValueTwo);\n }\n return propertyValueOne === propertyValueTwo;\n}\nexports.areItemPropertyValuesEqual = areItemPropertyValuesEqual;\nfunction areSizeRangesEqual(sizeRangeOne, sizeRangeTwo) {\n var _a, _b;\n if (!sizeRangeOne && !sizeRangeTwo) {\n return true;\n }\n if (!sizeRangeOne || !sizeRangeTwo || ((_a = sizeRangeOne.sizes) === null || _a === void 0 ? void 0 : _a.length) !== ((_b = sizeRangeTwo.sizes) === null || _b === void 0 ? void 0 : _b.length)) {\n return false;\n }\n const result = (0, compareDeep_1.getObjectDiffs)(sizeRangeOne, sizeRangeTwo, '');\n return result.length === 0;\n}\nfunction areArraysEqualIgnoreOrder(arrayOne, arrayTwo) {\n if (arrayOne.length !== arrayTwo.length) {\n return false;\n }\n const sortedArray1 = arrayOne.slice().sort();\n const sortedArray2 = arrayTwo.slice().sort();\n const areArraysEqual = sortedArray1.every((element, index) => element === sortedArray2[index]);\n return areArraysEqual;\n}\nfunction getPropertyKey(property) {\n if ([types_1.PropertyType.ObjectReference, types_1.PropertyType.UserList, types_1.PropertyType.TypeReference].includes(property.propertyType)) {\n return property.slug + 'Id';\n }\n return property.slug;\n}\nfunction getMultiSelectValueAsArray(multiSelectValue) {\n if (!multiSelectValue)\n return [];\n if (typeof multiSelectValue === 'string') {\n if (multiSelectValue.trim().length === 0)\n return [];\n return multiSelectValue.split(',');\n }\n return multiSelectValue;\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ObjectUtil = void 0;\nconst cloneDeep_1 = require(\"./cloneDeep/cloneDeep\");\nconst isObject_1 = require(\"./isObject/isObject\");\nconst mergeDeep_1 = require(\"./mergeDeep/mergeDeep\");\nconst compareDeep_1 = require(\"./compareDeep/compareDeep\");\nconst applyChangesIfEqual_1 = require(\"./applyChangesIfEqual/applyChangesIfEqual\");\nclass ObjectUtil {\n static getByPath(obj, path, def = null) {\n if (obj == undefined)\n return def;\n if (path.indexOf('.') === -1) {\n const value = obj[path];\n return value === undefined ? def : value;\n }\n const pathUnits = path.split('.');\n pathUnits.forEach((level) => {\n if (obj) {\n obj = obj[level];\n }\n });\n if (obj === undefined) {\n return def;\n }\n return obj;\n }\n static getBySlugs(obj, rootSlug, slug) {\n const rootValue = obj[rootSlug];\n if (rootValue && slug) {\n if (slug.indexOf('.') !== -1) {\n return this.getByPath(rootValue, slug);\n }\n else {\n return rootValue[slug];\n }\n }\n return rootValue;\n }\n static setByPath(obj, path, value) {\n const a = path.split('.');\n let o = obj;\n while (a.length - 1) {\n const n = a.shift();\n if (!(n in o))\n o[n] = {};\n o = o[n];\n }\n o[a[0]] = value;\n }\n static chunk(array, size) {\n const chunked = [];\n for (let i = 0; i < array.length; i = i + size) {\n chunked.push(array.slice(i, i + size));\n }\n return chunked;\n }\n static removeEmptyProperties(data) {\n if (data === null || data === undefined || typeof data !== 'object') {\n return data;\n }\n const isEmpty = (value) => value === null || value === undefined || (typeof value === 'string' && value.trim() === '');\n if (Array.isArray(data)) {\n const cleaned = data\n .map((item) => (typeof item === 'object' && item ? ObjectUtil.removeEmptyProperties(item) : item))\n .filter((item) => !isEmpty(item));\n return cleaned;\n }\n const cleaned = Object.entries(data).reduce((acc, [key, value]) => {\n if (!isEmpty(value)) {\n acc[key] = typeof value === 'object' && value ? ObjectUtil.removeEmptyProperties(value) : value;\n }\n return acc;\n }, {});\n return cleaned;\n }\n}\nexports.ObjectUtil = ObjectUtil;\nObjectUtil.isObject = isObject_1.isObject;\nObjectUtil.mergeDeep = mergeDeep_1.mergeDeep;\nObjectUtil.cloneDeep = cloneDeep_1.cloneDeep;\nObjectUtil.compareDeep = compareDeep_1.getObjectDiffs;\nObjectUtil.applyChangesIfEqual = applyChangesIfEqual_1.applyChangesIfEqual;\nObjectUtil.determineChangesIfEqual = applyChangesIfEqual_1.determineChangesIfEqual;\nObjectUtil.areItemPropertyValuesEqual = applyChangesIfEqual_1.areItemPropertyValuesEqual;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.OrderUtil = void 0;\nclass OrderUtil {\n static move(inputElements, from, to) {\n let numberOfDeletedElement = 1;\n const element = inputElements.splice(from, numberOfDeletedElement)[0];\n numberOfDeletedElement = 0;\n inputElements.splice(to, numberOfDeletedElement, element);\n return inputElements;\n }\n}\nexports.OrderUtil = OrderUtil;\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.PromiseUtil = void 0;\nconst p_limit_1 = require(\"p-limit\");\nconst lodash_1 = require(\"lodash\");\nclass PromiseUtil {\n static resolveInChunks(objects, chunksSize, asyncFunction) {\n const chunks = (0, lodash_1.chunk)(objects, chunksSize);\n const promises = [];\n for (const chunk of chunks) {\n promises.push(asyncFunction(chunk));\n }\n return Promise.all(promises).then((chunkedResults) => chunkedResults.flat());\n }\n static resolveInChunksAndLimit(objects, chunksSize, limitSize, asyncFunction) {\n const limit = (0, p_limit_1.default)(limitSize);\n const chunks = (0, lodash_1.chunk)(objects, chunksSize);\n const promises = [];\n for (const chunk of chunks) {\n const promise = limit(() => __awaiter(this, void 0, void 0, function* () {\n return yield asyncFunction(chunk);\n }));\n promises.push(promise);\n }\n return Promise.all(promises).then((chunkedResults) => chunkedResults.flat());\n }\n}\nexports.PromiseUtil = PromiseUtil;\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.retry = void 0;\nconst DEFAULT_CONFIG = {\n maxRetries: 3,\n initialDelay: 1000,\n};\nfunction retry(fn, config = DEFAULT_CONFIG) {\n return __awaiter(this, void 0, void 0, function* () {\n const { maxRetries, initialDelay, onRetryCallback } = Object.assign(Object.assign({}, DEFAULT_CONFIG), config);\n if (maxRetries < 1) {\n throw new Error('maxRetries must be at least 1');\n }\n let attempt = 0;\n while (attempt < maxRetries) {\n try {\n return yield fn();\n }\n catch (error) {\n attempt++;\n if (attempt === maxRetries) {\n throw error;\n }\n if (onRetryCallback) {\n yield onRetryCallback(error, attempt);\n }\n yield new Promise((resolve) => setTimeout(resolve, initialDelay * attempt));\n }\n }\n throw new Error('Max retries reached');\n });\n}\nexports.retry = retry;\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.delay = exports.TimerManager = exports.Timer = exports.TimeUnit = void 0;\nvar TimeUnit;\n(function (TimeUnit) {\n TimeUnit[\"MILLISECOND\"] = \"ms\";\n TimeUnit[\"SECOND\"] = \"s\";\n})(TimeUnit = exports.TimeUnit || (exports.TimeUnit = {}));\nconst MILLISECONDS_PER_TIME_UNIT = {\n [TimeUnit.MILLISECOND]: 1,\n [TimeUnit.SECOND]: 1000,\n};\nclass Timer {\n start() {\n if (this.startTime) {\n throw new Error('Timer already started');\n }\n this.startTime = this.getCurrentTime();\n }\n stop() {\n if (!this.startTime) {\n throw new Error('Timer not started');\n }\n this.endTime = this.getCurrentTime();\n }\n reset() {\n this.startTime = undefined;\n this.endTime = undefined;\n }\n getElapsedSeconds() {\n return this.getElapsedTime(TimeUnit.SECOND);\n }\n getElapsedMilliseconds() {\n return this.getElapsedTime();\n }\n getElapsedTime(timeUnit = TimeUnit.MILLISECOND) {\n if (!this.startTime) {\n throw new Error('Timer not started');\n }\n const endTime = this.endTime || this.getCurrentTime();\n const duration = endTime - this.startTime;\n return duration / MILLISECONDS_PER_TIME_UNIT[timeUnit];\n }\n getCurrentTime() {\n return performance.now();\n }\n}\nexports.Timer = Timer;\nclass TimerManager {\n constructor() {\n this.timers = new Map();\n }\n formatDuration(duration) {\n return duration > 1000 ? `${(duration / 1000).toFixed(2)}s` : `${duration}ms`;\n }\n start(key) {\n if (this.timers.has(key)) {\n throw new Error(`Timer with key \"${key}\" already started`);\n }\n const timer = new Timer();\n timer.start();\n this.timers.set(key, timer);\n }\n stop(key) {\n const timer = this.timers.get(key);\n if (!timer) {\n throw new Error(`Timer with key \"${key}\" not found`);\n }\n timer.stop();\n }\n reset(key) {\n this.timers.delete(key);\n }\n getElapsedTime(key, unit = TimeUnit.MILLISECOND) {\n const timer = this.timers.get(key);\n if (!timer) {\n throw new Error(`Timer with key \"${key}\" not found`);\n }\n return timer.getElapsedTime(unit);\n }\n has(key) {\n return this.timers.has(key);\n }\n clearAll() {\n this.timers.clear();\n }\n dump(options = {}) {\n const { unit = TimeUnit.MILLISECOND, format = false } = options;\n const result = {};\n for (const [key, timer] of this.timers.entries()) {\n try {\n const duration = timer.getElapsedTime(unit);\n result[key] = format ? this.formatDuration(duration) : duration;\n }\n catch (_a) {\n result[key] = NaN;\n }\n }\n return result;\n }\n}\nexports.TimerManager = TimerManager;\nfunction delay(ms) {\n return __awaiter(this, void 0, void 0, function* () {\n return new Promise((resolve) => {\n setTimeout(resolve, ms);\n });\n });\n}\nexports.delay = delay;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./app-util/app-util\"), exports);\n__exportStar(require(\"./compression-util\"), exports);\n__exportStar(require(\"./date-util/date-util\"), exports);\n__exportStar(require(\"./map-util/map-util\"), exports);\n__exportStar(require(\"./object-util/object-util\"), exports);\n__exportStar(require(\"./order-util/order-util\"), exports);\n__exportStar(require(\"./promise-util/promise-util\"), exports);\n__exportStar(require(\"./retry-util/retry-util\"), exports);\n__exportStar(require(\"./string-util/string-util\"), exports);\n__exportStar(require(\"./timer-util/timer-util\"), exports);\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.testables = exports.compareEntityCollections = void 0;\nconst util_1 = require(\"@contrail/util\");\nfunction compareEntityCollections(before, after, indexer) {\n const beforeComparableEntityMap = {};\n const afterComparableEntityMap = {};\n before === null || before === void 0 ? void 0 : before.forEach((comparableEntity) => {\n beforeComparableEntityMap[comparableEntity[indexer]] = comparableEntity;\n });\n after === null || after === void 0 ? void 0 : after.forEach((comparableEntity) => {\n afterComparableEntityMap[comparableEntity[indexer]] = comparableEntity;\n });\n return compareEntityMaps(beforeComparableEntityMap, afterComparableEntityMap);\n}\nexports.compareEntityCollections = compareEntityCollections;\nfunction compareEntityMaps(before, after) {\n const entityComparisonSummary = getNewEntityComparisonSummary();\n entityComparisonSummary.adds = getAdds(before, after);\n entityComparisonSummary.updates = getUpdates(before, after);\n entityComparisonSummary.deletes = getDeletes(before, after);\n entityComparisonSummary.unchanged = getUnchanged(before, after, entityComparisonSummary.updates);\n return entityComparisonSummary;\n}\nfunction getNewEntityComparisonSummary() {\n const entityComparisonSummary = {\n adds: [],\n updates: [],\n deletes: [],\n unchanged: [],\n };\n return entityComparisonSummary;\n}\nfunction getAdds(before, after) {\n const adds = [];\n if (!before || !after) {\n return adds;\n }\n const beforeIds = Object.keys(before);\n const afterIds = Object.keys(after);\n const addedKeys = afterIds.filter((value) => !beforeIds.includes(value));\n addedKeys.forEach((key) => {\n adds.push(after[key]);\n });\n return adds;\n}\nfunction getUpdates(before, after) {\n const itemDiffs = [];\n if (!before || !after) {\n return itemDiffs;\n }\n const beforeIds = Object.keys(before);\n const afterIds = Object.keys(after);\n const commonKeys = beforeIds.filter((value) => afterIds.includes(value));\n commonKeys.forEach((key) => {\n const beforeItem = before[key];\n const afterItem = after[key];\n const itemDiff = getEntityDiff(beforeItem, afterItem);\n if (itemDiff.diffs.length > 0) {\n itemDiffs.push(itemDiff);\n }\n });\n return itemDiffs;\n}\nfunction getDeletes(before, after) {\n const deletes = [];\n if (!before || !after) {\n return deletes;\n }\n const beforeIds = Object.keys(before);\n const afterIds = Object.keys(after);\n const deletedKeys = beforeIds.filter((value) => !afterIds.includes(value));\n deletedKeys.forEach((key) => {\n deletes.push(before[key]);\n });\n return deletes;\n}\nfunction getUnchanged(before, after, updates) {\n const unchanged = [];\n if (!before || !after) {\n return unchanged;\n }\n const beforeIds = Object.keys(before);\n const afterIds = Object.keys(after);\n const commonKeys = beforeIds.filter((value) => afterIds.includes(value));\n const updateKeys = [];\n updates.forEach((entityDiff) => {\n updateKeys.push(entityDiff.id);\n });\n const unchangedKeys = commonKeys.filter((value) => !updateKeys.includes(value));\n unchangedKeys.forEach((key) => {\n unchanged.push(before[key]);\n });\n return unchanged;\n}\nfunction getEntityDiff(before, after) {\n const entityDiff = {\n id: before === null || before === void 0 ? void 0 : before.id,\n diffs: [],\n };\n if (!before || !after) {\n return entityDiff;\n }\n const diffs = util_1.ObjectUtil.compareDeep(before, after, '');\n if (diffs.length > 0) {\n entityDiff.diffs = diffs;\n }\n return entityDiff;\n}\nexports.testables = {\n getNewSummaryfn: getNewEntityComparisonSummary,\n getAddsfn: getAdds,\n getUpdatesfn: getUpdates,\n getDeletesfn: getDeletes,\n getUnchangedfn: getUnchanged,\n getEntityDifffn: getEntityDiff,\n compareEntityMapsfn: compareEntityMaps,\n};\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./entity-compare.client\"), exports);\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./entity-compare\"), exports);\n","export * from './file-preprocessor';\nexport * from './common/conditional-columns';\nexport * from './common/csv-file-helper';\nexport * from './common/data-transformer-functions';\nexport * from './common/entity-builder-helpers';\nexport * from './entity-processor';\nexport * from './entities-v2/file-preprocessor-v2';\nexport * from './entities-v2/entity-processor-v2';\nexport * from './pipeline';\n","import {\n LoaderProcess,\n PreprocessingStepStoredResultSummary,\n EntitiesClient,\n GeneralIssueDetails,\n ProcessingIssues,\n IssueType,\n LoaderFailureArea,\n EntityType,\n ProcessedData,\n} from '@contrail/entity-types';\nimport { getCSVFromFile } from './common/csv-file-helper';\nimport {\n applyConditionalColumns,\n applyFederatedMappings,\n convertToBoolean,\n getReducedTypes,\n removeUnwantedProperties,\n transformDataBasedOnTypes,\n transformDataBasedOnTypesWithoutWarnings,\n TypePropertyMaps,\n getPropertiesBySlugAndLabel,\n getOptionSetsUsingTypePropertiesBySlug,\n} from './common/data-transformer-functions';\nimport { uploadFileAsStream } from './common/file-helper';\nimport { getProcessorForEntityType } from './processor-registry';\n\nexport interface PreProcessingStep {\n name: string;\n execute: PreprocessingFunction;\n}\n\nexport interface StepResultOutput {\n rows: any[];\n errors: ProcessingIssues[];\n warnings: ProcessingIssues[];\n generalErrors?: GeneralIssueDetails[];\n generalWarnings?: GeneralIssueDetails[];\n}\n\nexport interface PreprocessingFunction {\n (\n rows: any[],\n config?: {\n federatedMappings?: any;\n conditionalColumns?: any;\n propertiesToRemove?: string[];\n },\n typePropertyMaps?: TypePropertyMaps,\n addWarnings?: boolean,\n ): StepResultOutput;\n}\n\nexport class LoaderDataPreprocessor {\n static getPreprocessingPipeline(): PreProcessingStep[] {\n return [\n { name: 'Convert CSV Boolean Values', execute: convertToBoolean },\n {\n name: 'Apply Federated Mapping',\n execute: applyFederatedMappings,\n },\n {\n name: 'Remove Unwanted Properties',\n execute: removeUnwantedProperties,\n },\n {\n name: 'Transform Data Based on Types',\n execute: transformDataBasedOnTypesWithoutWarnings,\n },\n {\n name: 'Evaluate Conditional Columns',\n execute: applyConditionalColumns,\n },\n {\n name: 'Transform Data Based on Types',\n execute: transformDataBasedOnTypes,\n }, // we do this again after conditional columns are applied\n ];\n }\n\n static async transformAndValidateData(\n client: EntitiesClient,\n loaderProcess: LoaderProcess,\n entityType: EntityType,\n ): Promise<ProcessedData> {\n let failureArea: LoaderFailureArea = LoaderFailureArea.NONE;\n const transformationErrors: ProcessingIssues[] = [];\n const transformationWarnings: ProcessingIssues[] = [];\n const generalErrors: GeneralIssueDetails[] = [];\n const generalWarnings: GeneralIssueDetails[] = [];\n const systemErrors: GeneralIssueDetails[] = [];\n const preprocessingStepResults: PreprocessingStepStoredResultSummary[] = [];\n let processedData: any[] = [];\n\n try {\n // Step 1: Load CSV Data\n processedData = await this.loadCSVDataWithErrorHandling(client, loaderProcess, generalErrors);\n if (generalErrors.length) {\n failureArea = LoaderFailureArea.PARSING_CSV;\n return {\n csvRows: processedData,\n transformationErrors,\n transformationWarnings,\n generalErrors,\n generalWarnings,\n systemErrors,\n failureArea,\n };\n }\n\n // Step 2: Validate Data\n const processor = getProcessorForEntityType(entityType);\n const validationIssues = this.validateData(\n processor,\n processedData,\n loaderProcess,\n transformationErrors,\n transformationWarnings,\n generalErrors,\n generalWarnings,\n );\n\n if (validationIssues.hasErrors) {\n failureArea = LoaderFailureArea.VALIDATING_DATA;\n return {\n csvRows: processedData,\n transformationErrors,\n transformationWarnings,\n generalErrors,\n generalWarnings,\n systemErrors,\n failureArea,\n };\n }\n\n // Step 3: Preprocessing Pipeline\n const reducedTypes = await getReducedTypes(processor.typesToTransformBy || [], client);\n\n processedData = await this.runPreprocessingPipeline(\n client,\n loaderProcess,\n reducedTypes,\n processedData,\n preprocessingStepResults,\n transformationErrors,\n transformationWarnings,\n systemErrors,\n );\n\n // Step 4: Update Loader Process\n await this.updateLoaderProcess(client, loaderProcess.id, preprocessingStepResults, systemErrors);\n\n if (\n failureArea === LoaderFailureArea.NONE &&\n (transformationErrors.length || systemErrors.length || generalErrors.length)\n ) {\n failureArea = LoaderFailureArea.TRANSFORMING_DATA;\n }\n\n return {\n csvRows: processedData,\n transformationErrors,\n transformationWarnings,\n generalErrors,\n generalWarnings,\n systemErrors,\n failureArea,\n };\n } catch (e) {\n console.error('Error transforming data:', e.message);\n failureArea = LoaderFailureArea.TRANSFORMING_DATA;\n systemErrors.push({\n message: e.message,\n issueType: IssueType.SYSTEM_ERROR,\n });\n return {\n csvRows: processedData,\n failureArea,\n systemErrors,\n transformationErrors,\n transformationWarnings,\n generalErrors,\n generalWarnings,\n };\n }\n }\n\n // Step 1: Load CSV Data with Error Handling\n private static async loadCSVDataWithErrorHandling(\n client: EntitiesClient,\n loaderProcess: LoaderProcess,\n generalErrors: GeneralIssueDetails[],\n ): Promise<any[]> {\n try {\n return await this.loadCSVData(client, loaderProcess);\n } catch (e) {\n console.error('Error parsing CSV file:', e.message);\n generalErrors.push({\n message: e.message,\n issueType: IssueType.INVALID_DATA,\n });\n return [];\n }\n }\n\n // Step 2: Validate Data\n private static validateData(\n processor: any,\n processedData: any[],\n loaderProcess: LoaderProcess,\n transformationErrors: ProcessingIssues[],\n transformationWarnings: ProcessingIssues[],\n generalErrors: GeneralIssueDetails[],\n generalWarnings: GeneralIssueDetails[],\n ): { hasErrors: boolean } {\n const validationIssues = processor.validateLoadFile(processedData, loaderProcess);\n\n generalErrors.push(...(validationIssues.generalErrors ?? []));\n generalWarnings.push(...(validationIssues.generalWarnings ?? []));\n transformationErrors.push(...(validationIssues.errors ?? []));\n transformationWarnings.push(...(validationIssues.warnings ?? []));\n\n return {\n hasErrors: generalErrors.length > 0 || transformationErrors.length > 0,\n };\n }\n\n // Step 3: Run Preprocessing Pipeline\n private static async runPreprocessingPipeline(\n client: EntitiesClient,\n loaderProcess: LoaderProcess,\n reducedTypes: any[],\n processedData: any[],\n preprocessingStepResults: PreprocessingStepStoredResultSummary[],\n transformationErrors: ProcessingIssues[],\n transformationWarnings: ProcessingIssues[],\n systemErrors: GeneralIssueDetails[],\n ): Promise<any[]> {\n const { typePropertiesBySlug, typePropertiesByLabel } = getPropertiesBySlugAndLabel(reducedTypes);\n const optionSetUsingTypePropertiesBySlug = getOptionSetsUsingTypePropertiesBySlug(reducedTypes);\n const typePropertyMaps: TypePropertyMaps = {\n typePropertiesBySlug,\n typePropertiesByLabel,\n optionSetUsingTypePropertiesBySlug,\n };\n\n for (const preprocessingStep of this.getPreprocessingPipeline()) {\n try {\n console.info(`Preprocessing step: ${preprocessingStep.name} started`);\n const stepResult = preprocessingStep.execute(processedData, loaderProcess, typePropertyMaps);\n processedData = stepResult.rows;\n\n const fileId = await this.uploadStepResult(client, loaderProcess.id, preprocessingStep.name, stepResult);\n\n preprocessingStepResults.push({\n preprocessingStepName: preprocessingStep.name,\n fileId,\n numberOfErrors: stepResult.errors?.length || 0,\n numberOfWarnings: stepResult.warnings?.length || 0,\n });\n\n transformationErrors.push(...(stepResult.errors ?? []));\n transformationWarnings.push(...(stepResult.warnings ?? []));\n this.logIssues(preprocessingStep.name, stepResult.errors, stepResult.warnings);\n console.info(`Preprocessing step ${preprocessingStep.name} completed`);\n } catch (e) {\n const errorMessage = `Error in preprocessing step ${preprocessingStep.name}: ${e.message}`;\n console.error(errorMessage);\n systemErrors.push({\n message: errorMessage,\n issueType: IssueType.SYSTEM_ERROR,\n });\n break;\n }\n }\n\n return processedData;\n }\n\n private static async loadCSVData(client: EntitiesClient, loaderProcess: LoaderProcess): Promise<any[]> {\n const csvJSON = await getCSVFromFile(loaderProcess.loadFileId, client);\n return csvJSON;\n }\n\n private static logIssues(stepName: string, errors?: ProcessingIssues[], warnings?: ProcessingIssues[]) {\n errors?.forEach((error) => console.error(`Error in preprocessing step ${stepName}`, error));\n warnings?.forEach((warning) => console.warn(`Warning in preprocessing step ${stepName}`, warning));\n }\n\n private static async updateLoaderProcess(\n client: EntitiesClient,\n loaderProcessId: string,\n preprocessingStepResults: PreprocessingStepStoredResultSummary[],\n systemErrors: GeneralIssueDetails[],\n ) {\n try {\n await client.update({\n entityName: 'loader-process',\n id: loaderProcessId,\n object: { preprocessingStepResults },\n });\n } catch (e) {\n const errorMessage = `Error updating loader process with preprocessing results: ${e.message}`;\n console.error(errorMessage);\n systemErrors.push({\n message: errorMessage,\n issueType: IssueType.SYSTEM_ERROR,\n });\n }\n }\n\n static async uploadStepResult(\n client: EntitiesClient,\n loaderProcessId: string,\n stepName: string,\n stepResult: StepResultOutput,\n ): Promise<string> {\n const stringObject = JSON.stringify(stepResult);\n const buffer = Buffer.from(stringObject);\n const contentType = 'application/json';\n const fileName = `loader-process-step-${stepName}.json`;\n const fileEntity = await client.create({\n entityName: 'file',\n object: {\n contentType,\n fileName,\n ownedByReference: `loader-process:${loaderProcessId}`,\n },\n });\n\n await uploadFileAsStream(fileEntity?.uploadPost, buffer, contentType);\n\n if (!fileEntity?.id) {\n console.warn(`Could not save process logs. loaderProcessId: ${loaderProcessId} stepName: ${stepName}`);\n }\n\n return fileEntity?.id;\n }\n}\n","import { CsvError, parse } from 'csv-parse/sync';\nimport { EntitiesClient } from '@contrail/entity-types';\n\nexport async function getCSVFromFile(loadFileId: string, client: EntitiesClient): Promise<any[]> {\n const file = await client.get({ entityName: 'file', id: loadFileId }).catch((e) => {\n console.error(e);\n throw new Error(`Failed to fetch file with id ${loadFileId}: ${e.message}`);\n });\n\n if (!file) {\n const errorMessage = `File: ${loadFileId} is not available`;\n console.error(errorMessage);\n throw new Error(errorMessage);\n }\n\n if (!file.downloadUrl) {\n const errorMessage = `File: ${loadFileId} does not have a downloadUrl`;\n console.error(errorMessage);\n throw new Error(errorMessage);\n }\n\n let response;\n try {\n const res = await fetch(file.downloadUrl);\n if (!res.ok) {\n throw new Error(`Failed to fetch data from downloadUrl: ${file.downloadUrl}`);\n }\n response = await res.text();\n } catch (e) {\n const errorMessage = `Failed to get data from downloadUrl: ${file.downloadUrl}`;\n console.error(errorMessage, JSON.stringify(e));\n throw new Error(`${errorMessage}: ${e.message}`);\n }\n\n if (!response) {\n const errorMessage = 'Response is empty';\n console.error(errorMessage);\n throw new Error(errorMessage);\n }\n\n const csvJson = parseCSVData(response);\n return csvJson;\n}\n\nexport function parseCSVData(data: string): any[] {\n try {\n return parse(data, {\n columns: true,\n skip_empty_lines: true,\n relax_quotes: true,\n bom: true,\n trim: true,\n });\n } catch (e) {\n if (e instanceof CsvError) {\n throw new InvalidCSVError(`Failed to parse csv data. ${e.message}`);\n }\n throw e;\n }\n}\n\nexport class InvalidCSVError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'InvalidCSVError';\n }\n}\n","import { StringUtil } from '@contrail/util';\n\nexport class ColumnDefinition {\n fromProperty?: string;\n toProperty: string;\n conditions?: ConditionalValues[];\n default?: any;\n}\n\nexport class ConditionalValues {\n conditional: string;\n value: string;\n}\n\nexport class ColumnDefinitionEvaluator {\n static evaluateColumnDefinitionsOnBatch(columnDefinitions: ColumnDefinition[], rows: any[]) {\n for (const columnDefinition of columnDefinitions ?? []) {\n for (const row of rows) {\n ColumnDefinitionEvaluator.evaluateColumnDefinition(columnDefinition, row);\n }\n }\n }\n\n static evaluateColumnDefinition(columnDefinition: ColumnDefinition, row) {\n // No conditions - either use the value from fromProperty or the default;\n if (!columnDefinition?.conditions?.length) {\n if (columnDefinition.fromProperty) {\n if (\n (row[columnDefinition.fromProperty] === null ||\n row[columnDefinition.fromProperty] === undefined ||\n row[columnDefinition.fromProperty] === '') &&\n columnDefinition.default !== undefined\n ) {\n row[columnDefinition.toProperty] = ColumnDefinitionEvaluator.getValue(columnDefinition.default, row);\n } else {\n row[columnDefinition.toProperty] = row[columnDefinition.fromProperty];\n }\n } else if (columnDefinition.default !== undefined) {\n row[columnDefinition.toProperty] = ColumnDefinitionEvaluator.getValue(columnDefinition.default, row);\n }\n return;\n }\n\n let hit = false;\n for (const condition of columnDefinition.conditions) {\n if (ColumnDefinitionEvaluator.evaluateConditional(condition.conditional, row)) {\n row[columnDefinition.toProperty] = ColumnDefinitionEvaluator.getValue(condition.value, row);\n hit = true;\n break;\n }\n }\n\n if (!hit && columnDefinition.default !== undefined) {\n row[columnDefinition.toProperty] = ColumnDefinitionEvaluator.getValue(columnDefinition.default, row);\n }\n }\n\n static evaluateConditional(condition: string, row: any) {\n const parsedCondition = StringUtil.parseVariables(condition, row, true);\n\n let result = false;\n\n try {\n result = evaluateAsBool(parsedCondition);\n } catch (e) {\n console.warn('Failed to evaluate conditional. Error: ', e);\n }\n return result;\n }\n\n static getValue(value, row) {\n if (StringUtil.isString(value) && value.includes('{')) {\n try {\n const val = evaluate(StringUtil.parseVariables(value, row, true));\n return val;\n } catch {\n console.warn(`Error parsing value: ${value}`);\n return undefined;\n }\n } else {\n return value;\n }\n }\n}\n\nconst evaluateAsBool = (c) => Function(`return !!(${c})`)();\nconst evaluate = (c) => Function(`return ${c}`)();\n","import { ObjectUtil } from '@contrail/util';\nimport { Type, TypeProperty, PropertyType } from '@contrail/types';\nimport { EntitiesClient, GeneralIssueDetails, IssueType, TimeoutError } from '@contrail/entity-types';\nimport { uniq, chunk } from 'lodash';\n\nconst pLimit = require('p-limit');\n\nexport enum EntitiesLambdaCallType {\n GET = 'GET',\n CREATE = 'CREATE',\n UPDATE = 'UPDATE',\n DELETE = 'DELETE',\n BATCHCREATE = 'BATCHCREATE',\n BATCHUPDATE = 'BATCHUPDATE',\n}\n\nexport interface TypesByPath {\n [key: string]: {\n type: Type;\n allPropertiesSlugs: string[];\n typePropertyToValueType: { [key: string]: PropertyType };\n objectReferenceProperties: TypeProperty[];\n userListProperties: TypeProperty[];\n error?: GeneralIssueDetails;\n };\n}\n\nexport async function retryOnTimeout(\n client: EntitiesClient,\n callType: EntitiesLambdaCallType,\n callParams: any,\n maxRetries = 3,\n): Promise<any> {\n let callCount = 0;\n let done = false;\n let response;\n if (!client) {\n throw new Error('No client to use.');\n }\n\n while (!done && callCount <= maxRetries) {\n try {\n if (callCount > 0) {\n console.debug('Retrying call - Attempt: ', callCount);\n }\n switch (callType) {\n case EntitiesLambdaCallType.GET:\n response = await client.get(callParams);\n break;\n case EntitiesLambdaCallType.CREATE:\n response = await client.create(callParams);\n break;\n case EntitiesLambdaCallType.UPDATE:\n response = await client.update(callParams);\n break;\n case EntitiesLambdaCallType.DELETE:\n response = await client.delete(callParams);\n break;\n case EntitiesLambdaCallType.BATCHCREATE:\n response = await client.batchCreate(callParams);\n break;\n case EntitiesLambdaCallType.BATCHUPDATE:\n response = await client.batchUpdate(callParams);\n break;\n default:\n throw Error('Invalid EntitiesLambdaCallType');\n }\n\n done = true;\n } catch (e) {\n if (e instanceof TimeoutError && callCount + 1 <= maxRetries) {\n console.warn(`Lambda call failed due to timeout. callType: ${callType}, callParams: `, callParams);\n } else {\n console.error('Failed Lambda call. ', e);\n throw e;\n }\n }\n callCount++;\n }\n\n return response;\n}\n\nexport function UpdateNeeded(incoming, existing, fieldsToSkip = [], fieldsToSkipIfOnlyOnExisting = [], type?: Type) {\n console.debug(\n 'Comparing existing and incoming objects: ',\n JSON.stringify(incoming),\n ' existing: ',\n JSON.stringify(existing),\n );\n const diffs = compareIncomingAndExisting(incoming, existing, fieldsToSkip, fieldsToSkipIfOnlyOnExisting, type);\n if (diffs?.length > 0) {\n console.debug('objectDiffs: ', diffs);\n return true;\n }\n console.debug('No updates needed.');\n return false;\n}\n\nexport function compareIncomingAndExisting(\n incoming,\n existing,\n fieldsToSkip = [],\n fieldsToSkipIfOnlyOnExisting = [],\n type?: Type,\n) {\n const slimExisting: any = {};\n const keys = Object.keys(incoming);\n\n const cloneIncoming = ObjectUtil.cloneDeep(incoming);\n for (const key of keys) {\n parseDateOrNumberKey(cloneIncoming, key);\n slimExisting[key] = existing[key];\n parseDateOrNumberKey(slimExisting, key);\n }\n\n for (const fieldToSkip of fieldsToSkip) {\n delete slimExisting[fieldToSkip];\n delete cloneIncoming[fieldToSkip];\n }\n\n if (type) {\n const typePropertiesToSkip = type?.typeProperties\n ?.filter((x) =>\n [PropertyType.ObjectReference, PropertyType.TypeReference, PropertyType.UserList].includes(x.propertyType),\n )\n ?.map((x) => x.slug);\n\n for (const typePropertyToSkip of typePropertiesToSkip) {\n delete slimExisting[typePropertyToSkip];\n delete cloneIncoming[typePropertyToSkip];\n }\n }\n\n for (const fieldToSkipIfOnlyOnExisting of fieldsToSkipIfOnlyOnExisting) {\n if (\n Object.prototype.hasOwnProperty.call(slimExisting, fieldToSkipIfOnlyOnExisting) &&\n !Object.prototype.hasOwnProperty.call(cloneIncoming, fieldToSkipIfOnlyOnExisting)\n ) {\n delete slimExisting[fieldToSkipIfOnlyOnExisting];\n delete cloneIncoming[fieldToSkipIfOnlyOnExisting];\n }\n }\n\n const objectDiffs = ObjectUtil.compareDeep(slimExisting, cloneIncoming, '');\n return objectDiffs;\n}\n\nexport function parseDateOrNumberKey(obj, key, propertyType?) {\n const value = obj[key];\n if (!propertyType) {\n if (value != null && value instanceof Date) {\n obj[key] = `${value.toISOString()}`;\n } else if (value != null && typeof value === 'string' && value !== '') {\n const parse = Number(value);\n if (!isNaN(parse)) {\n obj[key] = parse;\n }\n }\n } else {\n if (value != null && propertyType === PropertyType.Date) {\n if (value instanceof Date) {\n obj[key] = `${value.toISOString()}`;\n } else {\n console.warn('PropertyType.Date is set but the value is not a Date object', value);\n obj[key] = null;\n }\n } else if (propertyType === PropertyType.Number) {\n const parse = Number(value);\n if (!isNaN(parse)) {\n obj[key] = parse;\n }\n }\n }\n}\n\nexport async function assignObjectReferences(\n client: EntitiesClient,\n typePaths: string[],\n typesByPath: TypesByPath,\n incomingEntities: any[],\n): Promise<GeneralIssueDetails[]> {\n const limit = pLimit(5);\n\n // get all object references\n const allObjectReferenceColumnsWithRootType = [];\n for (const typePath of typePaths ?? []) {\n const typeObj = typesByPath[typePath];\n if (!(typeObj?.objectReferenceProperties?.length > 0)) {\n console.debug(`No ObjectReferences for ${typePath}, skipping.`);\n continue;\n }\n\n for (const objectReferenceProperty of typeObj?.objectReferenceProperties ?? []) {\n const slug = objectReferenceProperty.slug;\n const rootType = objectReferenceProperty.referencedTypeRootSlug;\n const referencedTypePath = objectReferenceProperty.referencedTypePath;\n allObjectReferenceColumnsWithRootType.push({\n slug,\n rootType,\n referencedTypePath,\n });\n }\n }\n\n const allORFedIdsByType = {};\n for (const entity of incomingEntities) {\n for (const allORColumnWithRootType of allObjectReferenceColumnsWithRootType) {\n const slug = allORColumnWithRootType.slug;\n const levelVariants = getPropertyVariants(entity, slug, 'values');\n\n for (let fedId of levelVariants) {\n if (!allORFedIdsByType[allORColumnWithRootType.rootType]) {\n allORFedIdsByType[allORColumnWithRootType.rootType] = [];\n }\n\n // custom entities must start with their typePath\n if (\n !fedId.startsWith('custom-entity:') &&\n (allORColumnWithRootType.referencedTypePath as string).includes('custom-entity')\n ) {\n fedId = `${allORColumnWithRootType.referencedTypePath}:${fedId}`;\n }\n allORFedIdsByType[allORColumnWithRootType.rootType].push(fedId);\n }\n }\n }\n\n const allORByFedId = {};\n for (const rootType of Object.keys(allORFedIdsByType)) {\n const fedIds: string[] = [...new Set<string>(allORFedIdsByType[rootType])];\n const chunks: string[][] = chunk(fedIds, 200);\n const federatedPromises = [];\n // tslint:disable-next-line: forin\n for (const chunk of chunks) {\n if (!chunk?.length) {\n continue;\n }\n const federatedPromise = limit(async () => {\n try {\n const currentORBatch = await retryOnTimeout(client, EntitiesLambdaCallType.GET, {\n entityName: rootType,\n federatedIds: uniq(chunk),\n skipHydrateRelationships: true,\n });\n if (!currentORBatch) {\n // console.warn('No ObjectReferences were returned.');\n }\n if (currentORBatch?.length > 0) {\n for (const currentOR of currentORBatch) {\n allORByFedId[currentOR.federatedId] = currentOR;\n }\n }\n } catch (e) {\n console.error('Failed to get ObjectReferences by FederatedIds', e);\n throw new Error(`'Failed to get ObjectReferences by FederatedIds: ${e}`);\n }\n });\n federatedPromises.push(federatedPromise);\n }\n\n await Promise.all(federatedPromises);\n console.info(`ObjectReferences lookup complete. ${Object.keys(allORByFedId)?.length} Object References retrieved`);\n }\n\n const objectReferenceWarnings = new Set<string>();\n for (const entity of incomingEntities) {\n for (const allORColumnWithRootType of allObjectReferenceColumnsWithRootType) {\n const slug = allORColumnWithRootType.slug;\n const levelVariants = getPropertyVariants(entity, slug, 'keyValue') as Array<{\n key: string;\n value: any;\n }>;\n\n for (const variant of levelVariants) {\n let fedId = variant.value;\n if (!fedId) continue;\n\n if (\n !fedId.startsWith('custom-entity:') &&\n (allORColumnWithRootType.referencedTypePath as string).includes('custom-entity')\n ) {\n fedId = `${allORColumnWithRootType.referencedTypePath}:${fedId}`;\n }\n\n const objectReference = allORByFedId[fedId];\n if (!objectReference) {\n objectReferenceWarnings.add(`ObjectReference not found for ${slug} with value ${fedId}`);\n continue;\n }\n\n entity[variant.key + 'Id'] = objectReference.id;\n delete entity[variant.key];\n }\n }\n }\n\n return Array.from(objectReferenceWarnings).map((warning) => ({\n message: warning,\n issueType: IssueType.INVALID_DATA,\n }));\n}\n\nexport async function getUsersInOrg(client: EntitiesClient) {\n return await client.get({ entityName: 'user', relation: 'usersInOrg' });\n}\n\nexport async function assignUserLists(\n client: EntitiesClient,\n typePaths: string[],\n typesByPath: TypesByPath,\n incomingEntities: any[],\n) {\n const hasUserListProps = (typePaths ?? []).some((typePath) => {\n const typeObj = typesByPath[typePath];\n return typeObj?.userListProperties?.length > 0;\n });\n\n if (!hasUserListProps) {\n console.debug(`No user list properties for this load, skipping.`);\n return;\n }\n\n // get all user lists\n const users = await getUsersInOrg(client);\n const userEmailToIdMap = [];\n for (const user of users) {\n userEmailToIdMap[user.email] = user.id;\n }\n for (const typePath of typePaths ?? []) {\n const typeObj = typesByPath[typePath];\n if (!(typeObj?.userListProperties?.length > 0)) {\n console.debug(`No user lists for ${typePath}, skipping.`);\n continue;\n }\n\n for (const entity of incomingEntities) {\n for (const userListProperty of typeObj.userListProperties ?? []) {\n const slug = userListProperty.slug;\n const value = entity[slug];\n if (!value) {\n continue;\n }\n let userId = userEmailToIdMap[value];\n if (!userId) {\n userId = null;\n }\n entity[slug + 'Id'] = userId;\n delete entity[slug];\n }\n }\n }\n}\n\nexport function getPropertyVariants(\n entity: any,\n slug: string,\n returnType: 'values' | 'keyValue' = 'values',\n): Array<any> | Array<{ key: string; value: any }> {\n const hasFamilyOrOption = entity.hasOwnProperty(`${slug}Family`) || entity.hasOwnProperty(`${slug}Option`);\n const variants = [];\n\n // Add Family/Option variants if they exist\n if (entity.hasOwnProperty(`${slug}Family`)) {\n variants.push(\n returnType === 'values' ? entity[`${slug}Family`] : { key: `${slug}Family`, value: entity[`${slug}Family`] },\n );\n }\n if (entity.hasOwnProperty(`${slug}Option`)) {\n variants.push(\n returnType === 'values' ? entity[`${slug}Option`] : { key: `${slug}Option`, value: entity[`${slug}Option`] },\n );\n }\n\n // Only add base slug if no Family/Option exists\n if (!hasFamilyOrOption && entity.hasOwnProperty(slug)) {\n variants.push(returnType === 'values' ? entity[slug] : { key: slug, value: entity[slug] });\n }\n\n return variants;\n}\n","import { Type, TypeProperty } from '@contrail/types';\nimport { PreprocessingFunction, StepResultOutput } from '../file-preprocessor';\nimport { ColumnDefinitionEvaluator } from './conditional-columns';\nimport { EntitiesLambdaCallType, retryOnTimeout } from './entities-helper';\nimport { EntitiesClient, IssueType, ProcessingIssues } from '@contrail/entity-types';\n\nexport type TypePropertyWithLookups = TypeProperty & {\n optionLookupByValue?: Record<string, any>;\n optionLookupByDisplay?: Record<string, any>;\n};\n\nexport type TypePropertyMaps = {\n typePropertiesBySlug: Record<string, TypeProperty>;\n typePropertiesByLabel: Record<string, TypeProperty>;\n optionSetUsingTypePropertiesBySlug: Record<string, TypePropertyWithLookups>;\n};\n\nconst pLimit = require('p-limit');\nconst limit = pLimit(20);\n\nexport const applyFederatedMappings: PreprocessingFunction = function (csvJSON: any[], config: any): StepResultOutput {\n const federatedMappings: Record<string, string> = config.federatedMappings || {};\n const copy = createCopy(csvJSON);\n const warnings: ProcessingIssues[] = [];\n\n // Warn when a mapping's source column doesn't exist in the CSV headers\n if (copy.length > 0) {\n const csvHeaders = Object.keys(copy[0]);\n for (const [targetKey, sourceColumn] of Object.entries(federatedMappings)) {\n if (sourceColumn && !csvHeaders.includes(sourceColumn)) {\n warnings.push({\n rowNumber: 1,\n columnIssues: [{\n columnName: targetKey,\n message: `Federated mapping \"${targetKey}\" references source column \"${sourceColumn}\" which does not exist in the CSV headers. Check that the mapping value matches a CSV column name.`,\n issueType: IssueType.CONFIG,\n data: '',\n }],\n });\n }\n }\n }\n\n for (const row of copy) {\n for (const [key, value] of Object.entries(federatedMappings)) {\n if (!row[key]) {\n row[key] = row[value];\n }\n }\n }\n return { rows: copy, errors: [], warnings, generalErrors: [] };\n};\n\nexport const removeUnwantedProperties: PreprocessingFunction = function (\n csvJSON: any[],\n config: any,\n): StepResultOutput {\n const propertiesToRemove: string[] = config.propertiesToRemove || [];\n const rows = createCopy(csvJSON);\n if (propertiesToRemove?.length > 0) {\n for (const row of rows) {\n for (const prop of propertiesToRemove) {\n delete row[prop];\n }\n }\n }\n return { rows, errors: [], warnings: [], generalErrors: [] };\n};\n\nexport const trimValues: PreprocessingFunction = function (csvJSON: any[]): StepResultOutput {\n const rows = createCopy(csvJSON);\n for (const row of rows) {\n for (const key of Object.keys(row)) {\n if (typeof row[key] === 'string') {\n row[key] = row[key].trim();\n }\n }\n }\n return { rows, errors: [], warnings: [], generalErrors: [] };\n};\n\nexport const transformDataBasedOnTypes: PreprocessingFunction = function (\n csvJSON: any[],\n config: any,\n typePropertyMaps: TypePropertyMaps,\n addWarnings: boolean = true,\n): StepResultOutput {\n const rows = createCopy(csvJSON);\n\n const { typePropertiesBySlug, typePropertiesByLabel, optionSetUsingTypePropertiesBySlug } = typePropertyMaps;\n\n const labelWarnings = convertFromLabelToSlug(\n rows,\n typePropertiesBySlug,\n typePropertiesByLabel,\n getConvertedFields(config.federatedMappings),\n );\n\n const displayValueWarnings = convertFromDisplayToValue(\n rows,\n optionSetUsingTypePropertiesBySlug,\n Object.keys(typePropertiesBySlug),\n Object.keys(typePropertiesByLabel),\n );\n\n if (!addWarnings) {\n return { rows, errors: [], warnings: [], generalErrors: [] };\n }\n\n const warnings: ProcessingIssues[] = [...labelWarnings, ...displayValueWarnings];\n\n return { rows, errors: [], warnings, generalErrors: [] };\n};\n\nexport const transformDataBasedOnTypesWithoutWarnings: PreprocessingFunction = function (\n csvJSON: any[],\n config: any,\n typePropertyMaps: TypePropertyMaps,\n): StepResultOutput {\n return transformDataBasedOnTypes(csvJSON, config, typePropertyMaps, false);\n};\n\nexport async function getReducedTypes(typeRoots: string[], client: EntitiesClient) {\n const allTypes = await retryOnTimeout(client, EntitiesLambdaCallType.GET, {\n entityName: 'type',\n });\n\n const allSubtypesForRootTypes = allTypes.filter((type) => typeRoots.includes(type.typePath.split(':')[0]));\n\n const reducedTypes = await Promise.all(\n allSubtypesForRootTypes.map((type) =>\n limit(() =>\n retryOnTimeout(client, EntitiesLambdaCallType.GET, {\n entityName: 'type',\n id: type.id,\n relations: ['typeProperties'],\n customParams: { includeArchivedTypeProperties: true },\n }),\n ),\n ),\n );\n\n return reducedTypes;\n}\n\n// a utility function to avoid refactoring ColumnDefinitionEvaluator.evaluateColumnDefinitionsOnBatch\n// which is used in multiple parts of our stack\n// TODO: in the future, refactor ColumnDefinitionEvaluator.evaluateColumnDefinitionsOnBatch\nexport const applyConditionalColumns: PreprocessingFunction = function (csvJSON: any[], config: any): StepResultOutput {\n const rows = createCopy(csvJSON);\n ColumnDefinitionEvaluator.evaluateColumnDefinitionsOnBatch(config?.conditionalColumns, rows);\n return { rows, errors: [], warnings: [], generalErrors: [] };\n};\n\nexport function getPropertiesBySlugAndLabel(reducedTypes: Partial<Type>[]): {\n typePropertiesBySlug: Record<string, TypeProperty>;\n typePropertiesByLabel: Record<string, TypeProperty>;\n} {\n // create lookups to use in data transformation\n const typePropertiesBySlug: Record<string, TypeProperty> = {};\n const typePropertiesByLabel: Record<string, TypeProperty> = {};\n\n for (const type of reducedTypes) {\n if (type.typeProperties) {\n for (const typeProperty of type.typeProperties) {\n typePropertiesBySlug[typeProperty.slug.trim()] = typeProperty;\n typePropertiesByLabel[typeProperty.label.trim()] = typeProperty;\n }\n }\n }\n return { typePropertiesBySlug, typePropertiesByLabel };\n}\n\nexport function getOptionSetsUsingTypePropertiesBySlug(\n reducedTypes: Partial<Type>[],\n): Record<string, TypePropertyWithLookups> {\n const optionSetUsingTypePropertiesBySlug: Record<string, TypePropertyWithLookups> = {};\n\n for (const type of reducedTypes) {\n if (type.typeProperties) {\n for (const typeProperty of type.typeProperties) {\n if (['multi_select', 'choice'].includes(typeProperty.propertyType)) {\n optionSetUsingTypePropertiesBySlug[typeProperty.slug] = typeProperty;\n const optionLookupByValue: Record<string, any> = {};\n const optionLookupByDisplay: Record<string, any> = {};\n\n if (typeProperty.options) {\n for (const option of typeProperty.options) {\n optionLookupByValue[option.value] = option;\n optionLookupByDisplay[option.display] = option;\n }\n }\n\n const typePropertyWithLookups: TypePropertyWithLookups = { ...typeProperty };\n typePropertyWithLookups.optionLookupByValue = optionLookupByValue;\n typePropertyWithLookups.optionLookupByDisplay = optionLookupByDisplay;\n optionSetUsingTypePropertiesBySlug[typeProperty.slug] = typePropertyWithLookups;\n }\n }\n }\n }\n return optionSetUsingTypePropertiesBySlug;\n}\n\nfunction getConvertedFields(federatedMappings) {\n const convertedFields = {};\n if (federatedMappings && Object.values(federatedMappings).length > 0) {\n for (const value of Object.values(federatedMappings) as Array<string>) {\n convertedFields[value] = true;\n }\n }\n\n return convertedFields;\n}\n\n/**\n * Map the display name to the slug name so that properties get updated.\n * We keep the display name to ensure that other settings can still be reflected\n * e.g. assortment split fields.\n *\n * We rely on the addProperty function to filter out the display name.\n */\nexport function convertFromLabelToSlug(\n csvJSON,\n typePropertiesBySlug,\n typePropertiesByLabel,\n convertedFields,\n): ProcessingIssues[] {\n const keysToBeIgnored = ['federatedId', 'typePath', 'itemFamilyFederatedId', 'itemOptionFederatedId', 'optionGroup'];\n const keysWithoutProperties = new Set<string>();\n const archivedKeys = new Set<string>();\n const warnings: ProcessingIssues[] = [];\n\n for (const row of csvJSON) {\n for (const key of Object.keys(row)) {\n // Check if property is archived in either slug or label\n const slugProperty = typePropertiesBySlug[key];\n const labelProperty = typePropertiesByLabel[key];\n\n if (slugProperty?.isArchived || labelProperty?.isArchived) {\n archivedKeys.add(key);\n continue;\n }\n\n if (slugProperty || keysToBeIgnored.includes(key)) {\n continue;\n }\n\n if (labelProperty) {\n if (!row[labelProperty.slug]) {\n Object.defineProperty(row, labelProperty.slug, Object.getOwnPropertyDescriptor(row, key));\n }\n } else {\n if (!slugProperty) {\n const formattedProperty = removeOptionOrFamilySuffix(key);\n const resolvedSlugProperty = typePropertiesBySlug[formattedProperty];\n if (!resolvedSlugProperty) {\n keysWithoutProperties.add(key);\n }\n } else if (!convertedFields[key]) {\n keysWithoutProperties.add(key);\n }\n }\n }\n }\n\n // Add archived property warnings if any found\n if (archivedKeys.size > 0) {\n warnings.push({\n rowNumber: 1,\n columnIssues: Array.from(archivedKeys).map((key) => ({\n columnName: key,\n message: `Property ${key} is disabled. This property's data will not be processed.`,\n issueType: IssueType.HEADER_MISMATCH,\n data: '',\n })),\n });\n }\n\n // Add warnings for properties without mappings\n if (keysWithoutProperties.size > 0) {\n warnings.push({\n rowNumber: 1,\n columnIssues: Array.from(keysWithoutProperties).map((key) => ({\n columnName: key,\n message: `Type property ${key} does not have any mapping via CSV column or Config. This property will not be loaded into.`,\n issueType: IssueType.HEADER_MISMATCH,\n data: '',\n })),\n });\n }\n\n return warnings;\n}\n\nexport function convertFromDisplayToValue(\n csvJSON: any[],\n optionSetUsingTypePropertiesBySlug,\n typePropertySlugs: string[],\n typePropertyLabels: string[],\n): ProcessingIssues[] {\n const warnings: ProcessingIssues[] = [];\n\n // Find keys in csvJSON that match property slugs and labels\n const { keysInPropertySlugs, keysInPropertyLabels } = identifyKeysInProperties(\n csvJSON,\n typePropertySlugs,\n typePropertyLabels,\n );\n\n csvJSON.forEach((row, index) => {\n const columnIssues: ProcessingIssues['columnIssues'] = [];\n\n for (const [key, value] of Object.entries(row)) {\n const isKeyAnExactPropertyMatch = keysInPropertySlugs.get(key) || keysInPropertyLabels.get(key);\n const propertyName = isKeyAnExactPropertyMatch ? key : removeOptionOrFamilySuffix(key);\n const property = optionSetUsingTypePropertiesBySlug[propertyName];\n if (!property || property?.optionLookupByValue[value as any]) {\n continue;\n }\n\n if (property.propertyType === 'choice') {\n if (property?.optionLookupByDisplay[value as any]) {\n row[key] = property.optionLookupByDisplay[value as any].value;\n } else {\n if (value) {\n columnIssues.push({\n columnName: key,\n message: `Property: ${key} has unknown optionSet value: ${value}.`,\n issueType: IssueType.VALIDATION_ERROR,\n data: JSON.stringify(row),\n });\n }\n }\n } else if (property.propertyType === 'multi_select') {\n if (value === null || value === undefined) {\n continue;\n }\n const values = (value as string)?.split(',');\n for (let i = 0; i < values?.length; i++) {\n const innerValue = values[i].trim();\n if (!property || property?.optionLookupByValue[innerValue as any]) {\n continue;\n }\n if (property?.optionLookupByDisplay[innerValue]) {\n values[i] = property.optionLookupByDisplay[innerValue].value;\n } else {\n if (innerValue) {\n columnIssues.push({\n columnName: key,\n message: `Property: ${key} has unknown optionSet value: ${value}.`,\n issueType: IssueType.VALIDATION_ERROR,\n data: JSON.stringify(row),\n });\n }\n }\n }\n row[key] = values.join(',');\n }\n }\n\n if (columnIssues.length > 0) {\n warnings.push({\n rowNumber: index + 2,\n columnIssues,\n });\n }\n });\n\n return warnings;\n}\n\nexport function identifyKeysInProperties(\n csvJSON: any[],\n typePropertySlugs: string[],\n typePropertyLabels: string[],\n): {\n keysInPropertySlugs: Map<string, boolean>;\n keysInPropertyLabels: Map<string, boolean>;\n} {\n const keysInPropertySlugs = new Map<string, boolean>();\n const keysInPropertyLabels = new Map<string, boolean>();\n\n if (csvJSON.length === 0) return { keysInPropertySlugs, keysInPropertyLabels };\n\n for (const key of Object.keys(csvJSON[0])) {\n keysInPropertySlugs.set(key, typePropertySlugs.includes(key));\n keysInPropertyLabels.set(key, typePropertyLabels.includes(key));\n }\n\n return { keysInPropertySlugs, keysInPropertyLabels };\n}\n\nexport const convertToBoolean: PreprocessingFunction = function (csvJson: any[]): StepResultOutput {\n const rows = createCopy(csvJson);\n for (const row of rows) {\n for (const [key, value] of Object.entries(row)) {\n if (typeof value === 'string' && value.toLocaleLowerCase() === 'false') {\n row[key] = false;\n } else if (typeof value === 'string' && value.toLocaleLowerCase() === 'true') {\n row[key] = true;\n }\n }\n }\n\n return { rows, errors: [], warnings: [], generalErrors: [] };\n};\n\n/**\n * Remove the 'Option' or 'Family' suffix from the property name.\n * This method helps retrieve the actual property slug.\n * @param propertyName\n * @returns\n * @example\n * removeOptionOrFamilySuffix('lifecycleStageOption') => 'lifecycleStage'\n * removeOptionOrFamilySuffix('lifecycleStageFamily') => 'lifecycleStage'\n * removeOptionOrFamilySuffix('lifecycleStage') => 'lifecycleStage'\n */\nexport function removeOptionOrFamilySuffix(propertyName: string): string {\n if (!propertyName.endsWith('Family') && !propertyName.endsWith('Option')) {\n return propertyName;\n }\n\n return propertyName.replace(/(Family|Option)$/, '');\n}\n\nfunction createCopy(csvJSON: any[]) {\n return structuredClone(csvJSON);\n}\n","import fetch from 'node-fetch';\nconst FormData = require('form-data');\n\nexport async function uploadFileAsStream(uploadPost, buffer: Buffer, contentType?: string) {\n const formData = new FormData();\n formData.append('Content-Type', contentType);\n appendUploadHeaders(uploadPost, formData);\n formData.append('file', buffer);\n return new Promise((res, rej) => {\n formData.getLength(async (err, len) => {\n if (err) {\n rej(err);\n }\n const response = await fetch(uploadPost.url, {\n method: 'POST',\n body: formData,\n headers: {\n 'Content-Length': len,\n },\n });\n const text = await response.text();\n console.debug('text: ', text);\n res('ok');\n });\n });\n}\n\nfunction appendUploadHeaders(uploadPost, formData) {\n Object.entries(uploadPost.fields).forEach(([k, v]) => {\n formData.append(k, v as string);\n });\n}\n","import { EntityType } from '@contrail/entity-types';\nimport { BaseProcessor } from './base-processor';\nimport { ColorProcessor } from './color-processor';\nimport { CustomEntityProcessor } from './custom-entity-processor';\nimport { AssortmentProcessor } from './entities-v2/linesheet-v2/assortment-processor';\nimport { ItemProcessor } from './entities-v2/linesheet-v2/item-processor';\nimport { ProjectItemProcessor } from './entities-v2/linesheet-v2/project-item-processor';\nimport { BaseProcessorV2 } from './entities-v2/base-processor-v2';\nimport { CustomEntityProcessorV2 } from './entities-v2/custom-entities-v2/custom-entity-processor-v2';\nimport { ColorProcessorV2 } from './entities-v2/colors-v2/color-processor-v2';\n\nconst processorRegistryV1: Record<EntityType, typeof BaseProcessor | BaseProcessorV2> = {\n [EntityType.COLOR]: ColorProcessor,\n [EntityType.CUSTOM_ENTITY]: CustomEntityProcessor,\n [EntityType.ITEM]: ItemProcessor,\n [EntityType.ASSORTMENT]: AssortmentProcessor,\n [EntityType.PROJECT_ITEM]: ProjectItemProcessor,\n};\n\nconst processorRegistryV2: Record<EntityType, typeof BaseProcessorV2> = {\n [EntityType.COLOR]: ColorProcessorV2,\n [EntityType.CUSTOM_ENTITY]: CustomEntityProcessorV2,\n [EntityType.ITEM]: ItemProcessor,\n [EntityType.ASSORTMENT]: AssortmentProcessor,\n [EntityType.PROJECT_ITEM]: ProjectItemProcessor,\n};\n\nexport const getProcessorForEntityType = (entityType: EntityType, version: string = 'v1'): any => {\n if (!entityType) {\n throw new Error('Entity type cannot be null or undefined');\n }\n\n // Try to get v2 processor if requested\n if (version === 'v2') {\n const v2Processor = processorRegistryV2[entityType];\n if (v2Processor) {\n return v2Processor;\n }\n // Fall back to v1 if v2 doesn't exist\n console.warn(`No v2 processor found for entity type ${entityType}. Falling back to v1.`);\n }\n\n // Get v1 processor\n const v1Processor = processorRegistryV1[entityType];\n if (!v1Processor) {\n throw new Error(`Unknown entity type: ${entityType}`);\n }\n\n return v1Processor;\n};\n\nexport const getProcessorForEntityTypes = (entityTypes: EntityType[], version: string = 'v2'): any => {\n if (entityTypes.length == 0) {\n throw new Error('Entity types array cannot be empty');\n }\n\n // Special case: If multiple entity types are provided and one is ITEM, use ItemProcessor\n if (entityTypes.length > 1 && entityTypes.includes(EntityType.ITEM)) {\n // For the special case with ITEM, we'll use the specified version\n return getProcessorForEntityType(EntityType.ITEM, version);\n }\n\n return getProcessorForEntityType(entityTypes[0], version);\n};\n","import { GeneralIssueDetails, IssueType, LoaderProcess, LoadType, ProcessingIssues } from '@contrail/entity-types';\nimport { BaseProcessor } from './base-processor';\nimport { EntityProcessor } from './entity-processor';\nimport { COLOR_PROCESSOR_ERRORS, COLOR_PROCESSOR_WARNINGS } from './constants';\n\ninterface ColorData {\n hex?: string;\n [key: string]: any;\n}\n\nfunction removeHexHash(data: ColorData[]): ColorData[] {\n for (const row of data ?? []) {\n if (row.hex?.startsWith('#')) {\n row.hex = row.hex.slice(1);\n }\n }\n return data;\n}\n\nexport class ColorProcessor extends BaseProcessor {\n static typesToTransformBy: string[] = ['color'];\n static requiredProperties: string[] = ['typePath', 'typeId', 'federatedId', 'name', 'hex', 'red', 'green', 'blue'];\n\n static transformData(data: ColorData[]): ColorData[] {\n if (!data) {\n return [];\n }\n\n return removeHexHash(data);\n }\n\n private static validateTypePath(\n data: ColorData[],\n config: LoaderProcess,\n csvHeaders: string[],\n generalErrors: GeneralIssueDetails[],\n ): void {\n const typePathSource = {\n conditional: config?.conditionalColumns?.some(\n (column) => column.toProperty === 'typePath' && column.default === 'color',\n ),\n federated: config?.federatedMappings?.typePath,\n csv: csvHeaders?.includes('typePath'),\n };\n\n // Check CSV data if present (keep existing)\n if (typePathSource.csv) {\n const hasCorrectTypePath = data.every((row) => row.typePath === 'color');\n if (!hasCorrectTypePath) {\n generalErrors.push({\n message: COLOR_PROCESSOR_ERRORS.TYPEPATH_MISSING,\n issueType: IssueType.CONFIG,\n });\n }\n return;\n }\n\n // Only validate conditional if it exists and has typePath\n if (config?.conditionalColumns?.some((col) => col.toProperty === 'typePath')) {\n if (!typePathSource.conditional) {\n generalErrors.push({\n message: COLOR_PROCESSOR_ERRORS.TYPEPATH_MISSING,\n issueType: IssueType.CONFIG,\n });\n }\n }\n\n // Check federated mapping if present (keep existing)\n if (typePathSource.federated && !csvHeaders.includes(typePathSource.federated)) {\n generalErrors.push({\n message: COLOR_PROCESSOR_ERRORS.TYPEPATH_MISSING,\n issueType: IssueType.CONFIG,\n });\n }\n }\n\n static validateLoadFile(\n data: ColorData[],\n config: LoaderProcess,\n ): {\n errors: ProcessingIssues[];\n warnings: ProcessingIssues[];\n generalErrors: GeneralIssueDetails[];\n generalWarnings: GeneralIssueDetails[];\n } {\n const { errors, warnings, generalErrors, generalWarnings, csvHeaders } = EntityProcessor.validateLoadFile(\n data,\n config,\n LoadType.COLOR,\n );\n\n this.validateTypePath(data, config, csvHeaders, generalErrors);\n\n const redColumn = config?.federatedMappings?.red || 'red';\n const blueColumn = config?.federatedMappings?.blue || 'blue';\n const greenColumn = config?.federatedMappings?.green || 'green';\n const hexColumn = config?.federatedMappings?.hex || 'hex';\n const hasRedColumn = csvHeaders.includes(redColumn);\n const hasBlueColumn = csvHeaders.includes(blueColumn);\n const hasGreenColumn = csvHeaders.includes(greenColumn);\n const hasHexColumn = csvHeaders.includes(hexColumn);\n if (hasHexColumn && hasRedColumn && hasGreenColumn && hasBlueColumn) {\n generalWarnings.push({\n message: COLOR_PROCESSOR_WARNINGS.HEX_IGNORED_WARNING,\n issueType: IssueType.CONFIG,\n });\n }\n\n return { errors, warnings, generalErrors, generalWarnings };\n }\n}\n","import { GeneralIssueDetails, LoaderProcess, ProcessingIssues } from '@contrail/entity-types';\n\nexport class BaseProcessor {\n static typesToTransformBy: string[] = [];\n static requiredProperties: string[] = [];\n\n static transformData(data: any[]): any[] {\n return data;\n }\n\n static processFederatedId(federatedId: string, typePath: string): string {\n return federatedId;\n }\n\n static validateRow(row: { federatedId: string }): boolean {\n return !!row.federatedId;\n }\n\n static setExtraProperties(entity: any, type: any): void {}\n\n static validateLoadFile(\n data: any[],\n config: LoaderProcess,\n ): {\n errors: ProcessingIssues[];\n warnings: ProcessingIssues[];\n generalErrors: GeneralIssueDetails[];\n generalWarnings: GeneralIssueDetails[];\n } {\n return {\n errors: [],\n warnings: [],\n generalErrors: [],\n generalWarnings: [],\n };\n }\n}\n","import { PropertyType } from '@contrail/types';\n\nexport interface SomeObject {\n [key: string]: any;\n}\n\nexport function addProperty(\n propertyName: string,\n allPropertiesSlugs: string[],\n valueType: PropertyType,\n object: any,\n value: any,\n): SomeObject {\n if (shouldSkipProperty(value, valueType)) {\n return object;\n }\n\n if (valueType === PropertyType.SizeRange) {\n if (!value || typeof value !== 'string') {\n return object;\n }\n // new balance size range format. They are the only users at the moment.\n // we may need to revisit this format once we find its limitations.\n const regex = /((\\w+):\\s*([\\d+,]+))/g;\n const sizes = {};\n let foundMatches = false;\n const sizeRangesFound = value.matchAll(regex);\n for (const sizeRange of sizeRangesFound) {\n const sizeRangeFirstDimension = sizeRange[2];\n const sizeRangeSecondDimension = sizeRange[3];\n sizes[sizeRangeFirstDimension] = sizeRangeSecondDimension.split(',').filter((x) => !!x);\n foundMatches = true;\n }\n if (foundMatches) {\n object[propertyName] = { sizes };\n return object;\n }\n\n // if not in NB format, try parsing as a comma separated string\n const split = value.split(',').filter((x) => !!x);\n if (split.length) {\n object[propertyName] = { sizes: split };\n return object;\n }\n\n console.debug('failed to parse size range', value);\n }\n\n if (['currency', 'sequence', 'percent', 'number'].includes(valueType)) {\n if (value && (isNaN(value) || (typeof value !== 'number' && typeof value === 'string'))) {\n const noCommaString = value?.replace(/,/g, '');\n const noBackslashString = noCommaString?.replace(/\\\\/g, '');\n const noQuoteString = noBackslashString?.replace(/\"/g, '');\n const parse = Number(noQuoteString);\n if (!isNaN(parse)) {\n value = parse;\n }\n }\n }\n\n const isValueEmpty = !value || (typeof value === 'string' && !value.trim());\n const clearablePropertyTypes: string[] = [PropertyType.SingleSelect, PropertyType.MultiSelect, PropertyType.Date];\n if (clearablePropertyTypes.includes(valueType) && isValueEmpty) {\n value = null;\n }\n\n // if the multi select is passed as \"inline,category\", split it into [\"inline\", \"category\"]\n if (valueType === PropertyType.MultiSelect && typeof value === 'string') {\n value = value.split(',');\n }\n\n const propertyLevels = propertyName.split('.');\n\n if (allPropertiesSlugs.includes(propertyLevels[0])) {\n let ref = object;\n for (let i = 0; i < propertyLevels.length - 1; i++) {\n ref[propertyLevels[i]] = ref[propertyLevels[i]] || {};\n ref = ref[propertyLevels[i]];\n }\n\n if (valueType !== PropertyType.Date || isValueEmpty) {\n ref[propertyLevels[propertyLevels.length - 1]] = value;\n } else {\n ref[propertyLevels[propertyLevels.length - 1]] = new Date(value);\n }\n } else if (isDerivedProperty(propertyName, allPropertiesSlugs)) {\n object[propertyName] = value;\n }\n\n return object;\n}\n\nexport function shouldSkipProperty(value: any, valueType: string) {\n // we should never include formula as a property in an object\n if (valueType === 'formula') {\n return true;\n }\n\n // if the value is a literal boolean \"false\" then we should include it\n // this is legacy code due to our string to boolean conversion on CSV read\n // \"FALSE\" string becomes false boolean regardless of the property type\n // of the column\n if (value === false) {\n return false;\n }\n\n // For text and string, an empty string is a valid value\n const validEmptyStringTypes: string[] = [\n PropertyType.String,\n PropertyType.Text,\n PropertyType.SingleSelect,\n PropertyType.MultiSelect,\n PropertyType.Date,\n ];\n if (validEmptyStringTypes.includes(valueType) && value === '') {\n return false;\n }\n\n // booleans always get included\n if (valueType === PropertyType.Boolean) {\n return false;\n }\n\n // valid number should be included even if falsy (0)\n const validNumberTypes: string[] = [\n PropertyType.Number,\n PropertyType.Currency,\n PropertyType.Percent,\n PropertyType.Sequence,\n ];\n if (validNumberTypes.includes(valueType) && value !== null && value !== undefined && !isNaN(value)) {\n return false;\n }\n\n // falsy values should be skipped. This is legacy code... should we really be doing this?\n if (!value) {\n return true;\n }\n\n // should include everything else\n return false;\n}\n\nfunction isDerivedProperty(propertyName: string, allPropertiesSlugs: string[]): boolean {\n if (!propertyName.endsWith('Family') && !propertyName.endsWith('Option')) {\n return false;\n }\n\n const basePropertyName = propertyName.replace(/(Family|Option)$/, '');\n return allPropertiesSlugs.includes(basePropertyName);\n}\n","import { assignObjectReferences, EntitiesLambdaCallType, retryOnTimeout, TypesByPath } from './common/entities-helper';\nimport { addProperty } from './common/entity-builder-helpers';\nimport { getProcessorForEntityType } from './processor-registry';\nimport { chunk } from 'lodash';\nimport { buildTypesByPath } from './common/type-helper';\nimport {\n EntitiesClient,\n EntityType,\n GeneralIssueDetails,\n IssueType,\n LoaderProcess,\n LoadType,\n ProcessingIssues,\n} from '@contrail/entity-types';\nimport { BaseProcessor } from './base-processor';\nimport { getDuplicateFederatedIds } from './common/util';\nimport { ENTITY_PROCESSOR_ERRORS } from './constants';\n\nconst pLimit = require('p-limit');\nconst limit = pLimit(5);\n\nexport interface ProcessedEntity {\n incomingEntities: string[];\n badEntities: string[];\n allCurrentEntitiesByFederatedId: Record<string, any>;\n generalWarnings?: GeneralIssueDetails[];\n}\n\nexport interface UniqueAndDuplicateEntries {\n uniqueStrings: string[];\n duplicateStrings: string[];\n}\n\nexport class EntityProcessor {\n static async setupEntities(client: EntitiesClient, entityType: EntityType, rawData: any[]): Promise<ProcessedEntity> {\n try {\n const processor = getProcessorForEntityType(entityType);\n\n rawData = processor.transformData(rawData);\n\n const requiredProperties = processor.requiredProperties || [];\n const result = await this.constructEntities(client, processor, entityType, requiredProperties, rawData);\n\n return result;\n } catch (error) {\n console.error(`Error processing and loading objects for ${entityType}:`, error);\n return {\n incomingEntities: rawData,\n badEntities: [],\n allCurrentEntitiesByFederatedId: {},\n };\n }\n }\n\n private static async constructEntities(\n client: EntitiesClient,\n processor: typeof BaseProcessor,\n entityType: EntityType,\n requiredProperties: string[] = [],\n data: any[] = [],\n ): Promise<ProcessedEntity> {\n if (!data?.length) {\n console.debug('No data to upload');\n return {\n incomingEntities: [],\n badEntities: [],\n allCurrentEntitiesByFederatedId: {},\n };\n }\n\n const typePaths = this.getTypePaths(data, entityType);\n const typesByPath: TypesByPath = await this.fetchTypesByPath(client, typePaths, requiredProperties, entityType);\n\n const { badEntities, incomingEntities } = this.buildIncomingEntities(processor, data, typesByPath, entityType);\n\n if (incomingEntities.length === 0)\n return {\n incomingEntities,\n badEntities,\n allCurrentEntitiesByFederatedId: {},\n };\n\n const generalWarnings = await assignObjectReferences(client, typePaths, typesByPath, incomingEntities);\n\n const federatedIds = this.extractFederatedIds(incomingEntities, processor);\n const allCurrentEntitiesByFederatedId = await this.fetchCurrentEntities(client, entityType, federatedIds);\n\n console.debug(`${entityType}s to upload: `, incomingEntities.length);\n\n return {\n incomingEntities,\n badEntities,\n allCurrentEntitiesByFederatedId,\n generalWarnings,\n };\n }\n\n private static getTypePaths(data: any[], entityType: string): string[] {\n return Array.from(new Set(data.map((row) => row.typePath || entityType)));\n }\n\n private static async fetchTypesByPath(\n client: EntitiesClient,\n typePaths: string[],\n requiredProperties: string[],\n entityType: string,\n ): Promise<TypesByPath> {\n const typesByPath = await buildTypesByPath(client, typePaths, requiredProperties, entityType);\n console.debug(`Using ${entityType} types:`, JSON.stringify(typesByPath, null, 2));\n return typesByPath;\n }\n\n private static buildIncomingEntities(\n processor: typeof BaseProcessor,\n data: any[],\n typesByPath: TypesByPath,\n entityType: string,\n ): { badEntities: any[]; incomingEntities: any[] } {\n const incomingEntities = [];\n const badEntities = [];\n\n for (const row of data) {\n if (!processor.validateRow(row)) {\n badEntities.push(row);\n console.error(`Invalid data found for this row ${entityType}:`, row);\n continue;\n }\n\n const typePath = row.typePath || entityType;\n const type = typesByPath[typePath];\n const entity: any = {};\n\n for (const propertyName in row) {\n if (type.allPropertiesSlugs.includes(propertyName)) {\n addProperty(\n propertyName,\n type.allPropertiesSlugs,\n type.typePropertyToValueType[propertyName],\n entity,\n row[propertyName],\n );\n }\n }\n\n processor.setExtraProperties(entity, type);\n\n incomingEntities.push(entity);\n }\n\n return { badEntities, incomingEntities };\n }\n\n private static extractFederatedIds(incomingEntities: any[], processor: typeof BaseProcessor): string[] {\n const allFederatedIds = [];\n const re = /\\//gi;\n\n for (const incomingEntity of incomingEntities) {\n const processedFederatedId = processor.processFederatedId(incomingEntity.federatedId, incomingEntity.typePath);\n const federatedId = processedFederatedId.replace(re, '%2F');\n allFederatedIds.push(federatedId);\n\n incomingEntity.federatedId = processedFederatedId;\n }\n\n const { uniqueStrings: uniqueFedIds, duplicateStrings: nonUniqueFedIds } =\n this.getUniqueAndDuplicateEntries(allFederatedIds);\n\n console.debug(`Unique federatedId count: ${uniqueFedIds?.length}`);\n console.debug(`Non-Unique federatedId count: ${nonUniqueFedIds?.length}`);\n console.debug(`Non-Unique federatedIds: ${Array.from(nonUniqueFedIds)}`);\n\n return [...uniqueFedIds, ...nonUniqueFedIds];\n }\n\n private static async fetchCurrentEntities(\n client: EntitiesClient,\n entityType: string,\n federatedIds: string[],\n ): Promise<Record<string, any>> {\n const chunks: string[][] = chunk(federatedIds, 200);\n const allCurrentEntitiesByFederatedId: Record<string, any> = {};\n const federatedPromises = [];\n\n for (const chunk of chunks) {\n if (!chunk?.length) continue;\n\n federatedPromises.push(\n limit(async () => {\n try {\n const currentEntityBatch = await retryOnTimeout(client, EntitiesLambdaCallType.GET, {\n entityName: entityType,\n federatedIds: chunk,\n skipHydrateRelationships: true,\n });\n\n if (currentEntityBatch?.length) {\n for (const currentEntity of currentEntityBatch) {\n allCurrentEntitiesByFederatedId[currentEntity.federatedId] = currentEntity;\n }\n }\n } catch (e) {\n console.error(`Failed to fetch ${entityType} by federatedIds:`, e);\n throw e;\n }\n }),\n );\n }\n\n await Promise.all(federatedPromises);\n console.info(\n `${entityType} lookup complete. ${Object.keys(allCurrentEntitiesByFederatedId).length} ${entityType}s retrieved`,\n );\n\n return allCurrentEntitiesByFederatedId;\n }\n\n private static getUniqueAndDuplicateEntries(strings: string[]): UniqueAndDuplicateEntries {\n const uniqueStrings = new Set<string>();\n const duplicateStrings = new Set<string>();\n\n for (const string of strings) {\n if (uniqueStrings.has(string)) {\n duplicateStrings.add(string);\n } else {\n uniqueStrings.add(string);\n }\n }\n\n return {\n uniqueStrings: Array.from(uniqueStrings),\n duplicateStrings: Array.from(duplicateStrings),\n };\n }\n\n public static validateLoadFile(data: any[], config: LoaderProcess, loadType: LoadType) {\n const csvHeaders = Object.keys(data[0]);\n const errors: ProcessingIssues[] = [];\n const warnings: ProcessingIssues[] = [];\n const generalErrors: GeneralIssueDetails[] = [];\n const generalWarnings: GeneralIssueDetails[] = [];\n\n if (!config) {\n generalErrors.push({\n message: ENTITY_PROCESSOR_ERRORS.CONFIG_EMPTY,\n issueType: IssueType.CONFIG,\n });\n return { errors, warnings, generalErrors, generalWarnings };\n }\n\n if (!config?.loadType?.length) {\n generalErrors.push({\n message: ENTITY_PROCESSOR_ERRORS.LOAD_TYPE_REQUIRED,\n issueType: IssueType.CONFIG,\n });\n }\n\n if (config?.loadType?.length && config?.loadType[0] !== loadType) {\n generalErrors.push({\n message: ENTITY_PROCESSOR_ERRORS.LOAD_TYPE_INVALID(loadType),\n issueType: IssueType.CONFIG,\n });\n }\n\n // Check federatedId in csvHeaders, federatedMapping, or conditionalColumns\n const federatedIdInConditional = config?.conditionalColumns?.some((column) => column.toProperty === 'federatedId');\n const federatedIdInFederatedMapping = config?.federatedMappings?.federatedId;\n const federatedIdInCSV = csvHeaders.includes('federatedId');\n\n if (!federatedIdInFederatedMapping && !federatedIdInCSV && !federatedIdInConditional) {\n generalErrors.push({\n message: ENTITY_PROCESSOR_ERRORS.FEDERATED_ID_REQUIRED,\n issueType: IssueType.CONFIG,\n });\n } else if (federatedIdInFederatedMapping && !csvHeaders.includes(config.federatedMappings.federatedId)) {\n generalErrors.push({\n message: ENTITY_PROCESSOR_ERRORS.FEDERATED_ID_REQUIRED,\n issueType: IssueType.CONFIG,\n });\n }\n\n // Check name in csvHeaders, federatedMapping, or conditionalColumns\n const nameInConditional = config?.conditionalColumns?.some((column) => column.toProperty === 'name');\n const nameInFederatedMapping = config?.federatedMappings?.name;\n const nameInCSV = csvHeaders.includes('name');\n\n if (!nameInFederatedMapping && !nameInCSV && !nameInConditional) {\n generalErrors.push({\n message: ENTITY_PROCESSOR_ERRORS.NAME_REQUIRED,\n issueType: IssueType.CONFIG,\n });\n } else if (nameInFederatedMapping && !csvHeaders.includes(config.federatedMappings.name)) {\n generalErrors.push({\n message: ENTITY_PROCESSOR_ERRORS.NAME_REQUIRED,\n issueType: IssueType.CONFIG,\n });\n }\n\n const duplicateFederatedIdErrors = getDuplicateFederatedIds(data, config?.federatedMappings?.federatedId);\n if (duplicateFederatedIdErrors.length) {\n errors.push(...duplicateFederatedIdErrors);\n }\n\n return { errors, warnings, generalErrors, generalWarnings, csvHeaders };\n }\n}\n","import { ObjectUtil } from '@contrail/util';\nimport { PropertyType, Type, TypeProperty, PropertyLevel } from '@contrail/types';\nimport { TypesByPath } from './entities-helper';\nimport { EntitiesClient, GeneralIssueDetails, IssueType } from '@contrail/entity-types';\n\nexport function getTypePropertySlugs(objType: Type): string[] {\n const typeProperties: string[] = objType?.typeProperties?.map((property) => property.slug);\n return typeProperties ?? [];\n}\n\nexport function getTypePropertyToValueType(objType: Type): { [key: string]: PropertyType } {\n const typePropertyToValueType: { [key: string]: PropertyType } = {};\n objType?.typeProperties?.map((property) => (typePropertyToValueType[property.slug] = property.propertyType));\n return typePropertyToValueType;\n}\n\nexport function getObjectReferenceTypeProperties(objType: Type): TypeProperty[] {\n return objType?.typeProperties?.filter((property) => property.propertyType === PropertyType.ObjectReference) ?? [];\n}\n\nexport function getUserListTypeProperties(objType: Type): TypeProperty[] {\n return objType?.typeProperties?.filter((property) => property.propertyType === PropertyType.UserList) ?? [];\n}\n\nexport function reduceToFamilyProperties(entity: any, type: Type) {\n let reducedItem = ObjectUtil.cloneDeep(entity);\n\n const typeProperties = type?.typeProperties ?? [];\n if (typeProperties.length === 0) {\n return entity;\n }\n\n for (const property of type.typeProperties) {\n // Skip if the property should be on the family\n if (\n !property.propertyLevel ||\n property.propertyLevel === PropertyLevel.FAMILY ||\n property.propertyLevel === PropertyLevel.ALL ||\n property.propertyLevel === PropertyLevel.OVERRIDABLE ||\n ['federatedId', 'typePath', 'typeId'].includes(property.slug)\n ) {\n reducedItem = setFamilyOverride(reducedItem, property);\n continue;\n }\n\n let slugToRemove = property.slug;\n if (property.propertyType === PropertyType.ObjectReference || property.propertyType === PropertyType.UserList) {\n slugToRemove = slugToRemove + 'Id';\n }\n\n delete reducedItem[slugToRemove];\n }\n\n const typePropsSlugs = new Set(typeProperties.map((prop) => prop.slug));\n if (typePropsSlugs.size > 0) {\n Object.keys(reducedItem).forEach((key) => {\n if (!isValidOptionProperty(key, typePropsSlugs)) {\n delete reducedItem[key];\n }\n });\n }\n\n return reducedItem;\n}\n\nexport function setFamilyOverride(entity: any, property: TypeProperty) {\n if (property.propertyLevel !== PropertyLevel.OVERRIDABLE) {\n return entity;\n }\n if (entity[property.slug + 'Family'] !== undefined) {\n entity[property.slug] = entity[property.slug + 'Family'];\n delete entity[property.slug + 'Family'];\n }\n return entity;\n}\n\nexport function setOptionOverrides(entity: any, type: { typeProperties?: TypeProperty[] }) {\n for (const property of type?.typeProperties) {\n entity = setOptionOverride(entity, property);\n }\n return entity;\n}\n\nexport function setOptionOverride(entity: any, property: TypeProperty) {\n if (property.propertyLevel !== 'overridable') {\n return entity;\n }\n\n if (entity[property.slug + 'Option'] !== undefined) {\n entity[property.slug] = entity[property.slug + 'Option'];\n delete entity[property.slug + 'Option'];\n }\n return entity;\n}\n\nexport async function buildTypesByPath(\n client: EntitiesClient,\n typePaths: string[],\n requiredNonTypeProperties: string[],\n entityType: string,\n typesByTypePath?: Record<string, Type>,\n): Promise<TypesByPath> {\n const results = {};\n await Promise.all(\n typePaths.map(async (typePath) => {\n let type: Type;\n let error: GeneralIssueDetails | null = null;\n\n const cachedType = typesByTypePath?.[typePath];\n if (cachedType) {\n type = cachedType;\n } else {\n const result = await getType(client, entityType, typePath);\n type = result.objectType;\n error = result.error;\n }\n\n results[typePath] = {\n type,\n allPropertiesSlugs: getTypePropertySlugs(type).concat(requiredNonTypeProperties),\n typePropertyToValueType: getTypePropertyToValueType(type),\n objectReferenceProperties: getObjectReferenceTypeProperties(type),\n userListProperties: getUserListTypeProperties(type),\n error,\n };\n }),\n );\n return results;\n}\n\nasync function getType(\n client: EntitiesClient,\n entityType: string,\n typePath?: string,\n): Promise<{ error: GeneralIssueDetails; objectType: Type }> {\n let error: GeneralIssueDetails = null;\n const fallbackTypePath = entityType;\n const resolvedTypePath = typePath ?? fallbackTypePath;\n\n const resolvedPathParams = resolvedTypePath.split(':');\n\n if (!resolvedPathParams.length) {\n error = {\n message: `Invalid Type: ${typePath}`,\n issueType: IssueType.INVALID_DATA,\n };\n console.error(`Invalid Type: ${typePath}`);\n }\n\n const root = resolvedPathParams[0];\n\n const suffix = `roots/${root}/path/${resolvedTypePath}`;\n\n const objectType = await client.get({\n entityName: 'type',\n suffix,\n relations: ['typeProperties'],\n });\n\n if (!objectType) {\n console.error(`Invalid Type: ${typePath}`);\n error = {\n message: `Invalid Type: ${typePath}`,\n issueType: IssueType.INVALID_DATA,\n };\n }\n\n return { error, objectType };\n}\n\nfunction isValidOptionProperty(key: string, typePropsSlugs: Set<string>): boolean {\n if (key.endsWith('Option')) {\n return typePropsSlugs.has(key);\n }\n return true;\n}\n\n/**\n * Remove family-level properties from an option entity.\n * Ported from ItemLoaderV2.removeFamilyLevelPropsFromOption in contrail-api.\n */\nexport function removeFamilyLevelPropsFromOption(item: any, type: Type) {\n const { familyProps, optionProps } = (type?.typeProperties ?? []).reduce(\n (acc, x) => {\n if (x.propertyLevel === 'family') {\n acc.familyProps.push(x);\n } else {\n acc.optionProps.push(x);\n }\n return acc;\n },\n { familyProps: [] as TypeProperty[], optionProps: [] as TypeProperty[] },\n );\n\n const badProps: string[] = [];\n for (const familyProp of familyProps) {\n const isReferenceProp = [\n PropertyType.ObjectReference,\n PropertyType.UserList,\n PropertyType.TypeReference,\n ].includes(familyProp.propertyType);\n const propSlug = isReferenceProp ? familyProp.slug + 'Id' : familyProp.slug;\n if (item[propSlug] !== undefined) {\n badProps.push(propSlug);\n }\n }\n\n const optionPropsSet = new Set(optionProps.map((prop) => prop.slug));\n if (optionPropsSet.size > 0) {\n Object.keys(item).forEach((key) => {\n if (key.endsWith('Family') && !optionPropsSet.has(key)) {\n badProps.push(key);\n }\n });\n }\n\n for (const badProp of badProps) {\n delete item[badProp];\n }\n}\n","import { IssueType, ProcessingIssues } from '@contrail/entity-types';\nimport { groupBy, uniq, flatten } from 'lodash';\n\n/**\n * Accepts a list of strings and returns two arrays, one containing unique strings and the other containing duplicate strings. The two arrays do not intersect.\n *\n * Example:\n * input: ['a', 'b', 'a', 'c', 'd', 'b']\n * output: { uniqueStrings: ['c', 'd'], duplicateStrings: ['a', 'b'] }\n */\nexport function getUniqueAndDuplicateEntries(strings: string[]): {\n uniqueStrings: Array<string>;\n duplicateStrings: Array<string>;\n} {\n const uniqueStrings = new Set<string>();\n const duplicateStrings = new Set<string>();\n for (const string of strings) {\n if (duplicateStrings.has(string)) {\n continue;\n } else if (uniqueStrings.has(string)) {\n duplicateStrings.add(string);\n uniqueStrings.delete(string);\n } else {\n uniqueStrings.add(string);\n }\n }\n return {\n uniqueStrings: Array.from(uniqueStrings),\n duplicateStrings: Array.from(duplicateStrings),\n };\n}\n\nexport function getDuplicateFederatedIds(data: any[], federatedIdField: string): ProcessingIssues[] {\n if (!data || !federatedIdField) return [];\n\n const errors: ProcessingIssues[] = [];\n const federatedIdCounts: Record<string, number[]> = {};\n\n data.forEach((item, index) => {\n const federatedId = item[federatedIdField];\n if (!federatedId) return;\n\n if (!federatedIdCounts[federatedId]) {\n federatedIdCounts[federatedId] = [];\n }\n federatedIdCounts[federatedId].push(index + 2);\n });\n\n Object.entries(federatedIdCounts).forEach(([federatedId, indices]) => {\n if (indices.length > 1) {\n indices.forEach((rowIndex) => {\n errors.push({\n rowNumber: rowIndex,\n columnIssues: [\n {\n columnName: federatedIdField,\n message: `Duplicate federatedId found: ${federatedId}`,\n issueType: IssueType.DUPLICATE_FEDERATED_ID,\n data: JSON.stringify(data[rowIndex - 2]),\n },\n ],\n });\n });\n }\n });\n\n return errors;\n}\n\nexport function getConflictingFederatedIdsGroupedByField(\n data: any[],\n federatedIdField: string,\n groupByField: string,\n): string[] {\n if (!data || !federatedIdField || !groupByField) return [];\n const groupedByField = groupBy(data, groupByField);\n const conflictingFedIds = Object.entries(groupedByField)\n .map(([uniqueNames, rows]) => [uniqueNames, uniq(rows.map((x) => x[federatedIdField]))])\n .filter(([uniqueNames, uniqueFedIds]) => uniqueFedIds.length > 1)\n .map(([uniqueNames, conflictingFedIds]) => conflictingFedIds as string[]);\n return flatten(conflictingFedIds);\n}\n\n/**\n * Returns all the conflicting (non-unique) field values when grouped by federated ID.\n */\nexport function getConflictingFieldForFederatedId(\n data: any[],\n federatedIdField: string,\n field: string,\n): { federatedId: string; values: string[] }[] {\n if (!data || !federatedIdField || !field) return [];\n\n const groupedByFedId = groupBy(data, federatedIdField);\n const conflictingValues: {\n federatedId: string;\n values: string[];\n }[] = Object.entries(groupedByFedId)\n .map(([federatedId, rows]) => [federatedId, uniq(rows.map((x) => x[field]))])\n .filter(([federatedId, uniqueNames]) => uniqueNames.length > 1)\n .map(([federatedId, names]: [string, string[]]) => ({\n federatedId,\n values: names,\n }));\n return conflictingValues;\n}\n","export const COLOR_PROCESSOR_ERRORS = {\n TYPEPATH_MISSING:\n '\"typePath\" with value \"color\" is required property but is not found in the federatedMapping config, conditionalColumns config, or as a header in the CSV file. Please add a mapping \"typePath\" mapping with value \"color\" with one of these methods, then try the load again.',\n} as const;\n\nexport const COLOR_PROCESSOR_WARNINGS = {\n HEX_IGNORED_WARNING: '\"Hex\" is ignored when red, green, and blue columns are present',\n} as const;\n\nexport const CUSTOM_ENTITY_PROCESSOR_ERRORS = {\n TYPEPATH_MISSING:\n '\"typePath\" with value \"custom-entity:<subtypepath>\" is required property but is not found in the federatedMapping config, conditionalColumns config, or as a header in the CSV file. Please add a mapping \"typePath\" mapping with value \"custom-entity:<subtypepath>\" with one of these methods, then try the load again.',\n} as const;\n\nexport const ENTITY_PROCESSOR_ERRORS = {\n CONFIG_EMPTY: 'Config file is empty',\n LOAD_TYPE_REQUIRED: '\"loadType\" is required in the config file',\n LOAD_TYPE_INVALID: (type: string) => `\"loadType\" must be single value \"${type}\" in the config file`,\n FEDERATED_ID_REQUIRED:\n '\"federatedId\" is required property but is not found in the federatedMapping config, conditionalColumns config, or as a header in the CSV file. Please add a mapping \"federatedId\" mapping with one of these methods, then try the load again.',\n NAME_REQUIRED:\n '\"name\" is required property but is not found in the federatedMapping config, conditionalColumns config, or as a header in the CSV file. Please add a mapping \"name\" mapping with one of these methods, then try the load again.',\n SINGLE_LOAD_TYPE: (entityType: string) => `\"loadType\" must be single value \"${entityType}\" in the config file`,\n} as const;\n\nexport const ITEM_PROCESSOR_ERRORS = {\n LOAD_TYPE_INVALID: '\"loadType\" must be either of values [\"ITEM\", \"PROJECT_ITEM\", \"ASSORTMENT\"] in the config file',\n TYPEPATH_INVALID: '\"typePath\" must be \"item\" or \"item:<subtypepath>\" in the config file',\n FAMILY_ID_EMPTY: 'itemFamilyFederatedId is null or undefined or empty in the CSV file',\n CONFLICTING_IDS: (ids) => `Found conflicting family federated Ids: ${ids}`,\n} as const;\n\nexport const ITEM_PROCESSOR_WARNINGS = {\n OPTIONNAME_UNMAPPED:\n '\"optionName\" is not found in the federatedMapping config, conditionalColumns config, or as a header in the CSV file.',\n OPTIONNAME_NOT_FOUND: (optionName: string) => `\"${optionName}\" column not found in the CSV file`,\n OPTION_FEDERATED_ID_UNMAPPED:\n '\"itemOptionFederatedId\" is not found in the federatedMapping config, conditionalColumns config, or as a header in the CSV file.',\n OPTION_FEDERATED_ID_NOT_FOUND: (itemOptionFederatedId: string) =>\n `\"${itemOptionFederatedId}\" column not found in the CSV file`,\n} as const;\n","import { GeneralIssueDetails, IssueType, LoaderProcess, LoadType, ProcessingIssues } from '@contrail/entity-types';\nimport { BaseProcessor } from './base-processor';\nimport { EntityProcessor } from './entity-processor';\nimport { CUSTOM_ENTITY_PROCESSOR_ERRORS } from './constants';\n\ninterface CustomEntityData {\n [key: string]: any;\n}\n\nexport class CustomEntityProcessor extends BaseProcessor {\n static typesToTransformBy: string[] = ['custom-entity'];\n static requiredProperties = ['typePath', 'typeId', 'federatedId', 'name'];\n\n static processFederatedId(federatedId: string, typePath: string): string {\n if (!federatedId.startsWith('custom-entity:')) {\n federatedId = typePath + ':' + federatedId;\n }\n return federatedId;\n }\n\n static setExtraProperties(entity: any, type: any): void {\n entity.typeId = type.type.id;\n }\n\n private static isValidCustomEntityTypePath(typePath?: string): boolean {\n return !!typePath?.startsWith('custom-entity:') && !!typePath?.split(':')[1]?.length;\n }\n\n private static validateTypePath(\n data: CustomEntityData[],\n config: LoaderProcess,\n csvHeaders: string[],\n generalErrors: GeneralIssueDetails[],\n ): void {\n const typePathSource = {\n conditional: config?.conditionalColumns?.some(\n (column) => column.toProperty === 'typePath' && this.isValidCustomEntityTypePath(column.default),\n ),\n federated: config?.federatedMappings?.typePath,\n csv: csvHeaders?.includes('typePath'),\n };\n\n if (typePathSource.csv) {\n const hasCorrectTypePath = data.every((row) => this.isValidCustomEntityTypePath(row.typePath));\n if (!hasCorrectTypePath) {\n generalErrors.push({\n message: CUSTOM_ENTITY_PROCESSOR_ERRORS.TYPEPATH_MISSING,\n issueType: IssueType.CONFIG,\n });\n }\n return;\n }\n\n if (!typePathSource.conditional && !typePathSource.federated) {\n generalErrors.push({\n message: CUSTOM_ENTITY_PROCESSOR_ERRORS.TYPEPATH_MISSING,\n issueType: IssueType.CONFIG,\n });\n return;\n }\n\n if (typePathSource.federated && !csvHeaders.includes(typePathSource.federated)) {\n generalErrors.push({\n message: CUSTOM_ENTITY_PROCESSOR_ERRORS.TYPEPATH_MISSING,\n issueType: IssueType.CONFIG,\n });\n }\n }\n\n static validateLoadFile(\n data: CustomEntityData[],\n config: LoaderProcess,\n ): {\n errors: ProcessingIssues[];\n warnings: ProcessingIssues[];\n generalErrors: GeneralIssueDetails[];\n generalWarnings: GeneralIssueDetails[];\n } {\n const { errors, warnings, generalErrors, generalWarnings, csvHeaders } = EntityProcessor.validateLoadFile(\n data,\n config,\n LoadType.CUSTOM_ENTITY,\n );\n\n this.validateTypePath(data, config, csvHeaders, generalErrors);\n\n return { errors, warnings, generalErrors, generalWarnings };\n }\n}\n","import { EntitiesClient, EntityType, LoaderProcess } from '@contrail/entity-types';\nimport { addProperty } from '../../common/entity-builder-helpers';\nimport {\n convertToComparableEntities,\n getAssortment,\n getAssortmentItemProperties,\n getAssortmentItems,\n getItemsFromFederatedIds,\n mapAssortmentItemsToItemsAndFillItemId,\n ObjectTypeCache,\n} from './item-helper';\nimport { parseDateOrNumberKey } from '../../common/entities-helper';\nimport { BaseProcessorV2 } from '../base-processor-v2';\nimport { compareEntityCollections, EntityComparisonSummary } from '@contrail/entity-compare';\nimport { PartialAssortmentProcessor } from './partial-assortment-processor';\nimport { flatMap } from 'lodash';\nimport { Type } from '@contrail/types';\n\nexport interface PartialAssortmentLoadOperation {\n rowsToDrop: any[];\n rowsToAdd: any[];\n rowsToUpdate: any[];\n assortmentId?: string;\n assortmentIdentifier?: string;\n}\n\nexport interface AssortmentLoadOperation {\n rowsToLoad: any[];\n assortmentId?: string;\n assortmentIdentifier?: string;\n}\n\nexport class AssortmentProcessor extends BaseProcessorV2 {\n static requiredProperties: string[] = ['itemOptionFederatedId', 'itemFamilyFederatedId', 'assortmentId'];\n\n static validateRow(row: { itemFamilyFederatedId: string }): boolean {\n return !!row.itemFamilyFederatedId;\n }\n\n public static getFederatedIdKeys() {\n return ['itemFamilyFederatedId', 'itemOptionFederatedId'];\n }\n\n public static async buildAssortmentEntities(\n client: EntitiesClient,\n rawData: any[],\n loaderProcess: LoaderProcess,\n itemsByFederatedId,\n typesByTypePath?: Record<string, Type>,\n ): Promise<any> {\n return await this.processAssortmentLoad(loaderProcess, rawData, itemsByFederatedId, client, typesByTypePath);\n }\n\n private static async processAssortmentLoad(\n loaderProcess: LoaderProcess,\n rows: any[],\n itemsByFederatedId: any,\n client: EntitiesClient,\n typesByTypePath?: Record<string, Type>,\n ): Promise<any> {\n const errors: string[] = [];\n let assortmentResult;\n\n try {\n const partialConfig = this.getPartialAssortmentLoadConfig(loaderProcess, this.getCSVHeaders(rows));\n\n if (this.isUsingAssortmentSplit(loaderProcess)) {\n const rowsWithNoAssortmentSplit = rows.filter(\n (row) =>\n !loaderProcess.assortmentSplit.values\n .map((value) => value.value)\n .includes(row[loaderProcess.assortmentSplit.fieldToSplitOn]),\n );\n if (rowsWithNoAssortmentSplit.length) {\n const warningMessage = `Warning: ${rowsWithNoAssortmentSplit.length} rows do not have a valid value for fieldToSplitOn`;\n console.warn(warningMessage);\n }\n\n const groupedData = this.splitDataByAssortment(rows, loaderProcess);\n\n if (partialConfig.isPartialAssortmentLoad) {\n assortmentResult = await this.handlePartialLoad(\n loaderProcess,\n groupedData,\n client,\n itemsByFederatedId,\n typesByTypePath,\n );\n } else {\n assortmentResult = await this.handleFullLoad(\n loaderProcess,\n groupedData,\n client,\n itemsByFederatedId,\n typesByTypePath,\n );\n }\n } else {\n const result = await this.loadCSVJson(client, rows, itemsByFederatedId, null, null, typesByTypePath);\n assortmentResult = {\n incomingAssortmentItems: result.incomingAssortmentItems,\n badAssortmentItems: result.badAssortmentItems,\n assortmentDetails: [result],\n };\n }\n } catch (error) {\n console.error('Error processing assortment load:', error);\n errors.push(error.message);\n }\n return {\n incomingEntities: assortmentResult.incomingAssortmentItems,\n badEntities: assortmentResult.badAssortmentItems,\n allCurrentEntitiesByFederatedId: itemsByFederatedId,\n typesByPath: [],\n projectId: null,\n ...assortmentResult,\n };\n }\n\n private static getCSVHeaders(rows: any[]): Set<string> {\n return new Set(flatMap(rows, Object.keys));\n }\n\n private static getPartialAssortmentLoadConfig(loaderProcess: LoaderProcess, csvHeaders: Set<string>) {\n let dropField: string;\n let isPartialAssortmentLoad = false;\n // prioritizes top level config over assortmentSplit config\n if (loaderProcess?.partialAssortmentUpdate) {\n isPartialAssortmentLoad = true;\n if (!loaderProcess?.assortmentItemDropField) {\n console.error('Error: partialAssortmentUpdate requires assortmentItemDropField');\n throw new Error('Error: partialAssortmentUpdate requires assortmentItemDropField in the main loader config');\n }\n if (!csvHeaders.has(loaderProcess.assortmentItemDropField)) {\n console.error('Error: partialAssortmentUpdate requires assortmentItemDropField to be present in the data.');\n throw new Error(\n `Error: partialAssortmentUpdate requires assortmentItemDropField (${loaderProcess.assortmentItemDropField}) to be present in the data.`,\n );\n }\n dropField = loaderProcess.assortmentItemDropField;\n } else if (loaderProcess?.assortmentSplit?.partialAssortmentUpdate) {\n isPartialAssortmentLoad = true;\n if (!loaderProcess?.assortmentSplit?.dropField) {\n console.error('Error: partialAssortmentUpdate requires dropField in the assortmentSplit config');\n throw new Error('Error: partialAssortmentUpdate requires dropField in the assortmentSplit config');\n }\n if (!csvHeaders.has(loaderProcess?.assortmentSplit?.dropField)) {\n console.error('Error: partialAssortmentUpdate requires dropField to be present in the data.');\n throw new Error(\n `Error: partialAssortmentUpdate requires dropField (${loaderProcess?.assortmentSplit?.dropField}) to be present in the data.`,\n );\n }\n dropField = loaderProcess?.assortmentSplit?.dropField;\n }\n // else, this is not a partial assortment load\n\n return { isPartialAssortmentLoad, dropField };\n }\n\n private static isUsingAssortmentSplit(loaderProcess: LoaderProcess): boolean {\n return !!(\n loaderProcess.assortmentSplit &&\n loaderProcess.assortmentSplit.values?.length &&\n loaderProcess.assortmentSplit.fieldToSplitOn\n );\n }\n\n private static splitDataByAssortment(rows: any[], loaderProcess: LoaderProcess) {\n const fieldToSplitOn = loaderProcess.assortmentSplit.fieldToSplitOn;\n const validValues = loaderProcess.assortmentSplit.values.map((v) => v.value);\n\n const groups = {};\n const rowsWithoutValidFieldToSplitOn = [];\n for (const csvJSONrow of rows) {\n if (!validValues.includes(csvJSONrow[fieldToSplitOn])) {\n rowsWithoutValidFieldToSplitOn.push(csvJSONrow);\n continue;\n }\n\n if (!groups[csvJSONrow[fieldToSplitOn]]) {\n groups[csvJSONrow[fieldToSplitOn]] = [];\n }\n groups[csvJSONrow[fieldToSplitOn]].push(csvJSONrow);\n }\n\n console.debug('Row(s) do not have valid fieldToSplitOn.', rowsWithoutValidFieldToSplitOn.length);\n console.debug('Row(s) do not have valid fieldToSplitOn.', rowsWithoutValidFieldToSplitOn);\n console.debug('Group Data:');\n\n const groupKeys = Object.keys(groups);\n for (const groupKey of groupKeys) {\n console.debug(`Group ${groupKey}:`, groups[groupKey].length);\n }\n return groups;\n }\n\n private static async handlePartialLoad(\n loaderProcess: LoaderProcess,\n groupedData: Record<string, any[]>,\n client: EntitiesClient,\n itemsByFederatedId: any,\n typesByTypePath?: Record<string, Type>,\n ) {\n const operations = this.createPartialLoadOperations(loaderProcess, groupedData);\n return this.runPartialLoaderOperations(operations, client, itemsByFederatedId, typesByTypePath);\n }\n\n private static async handleFullLoad(\n loaderProcess: LoaderProcess,\n groupedData: Record<string, any[]>,\n client: EntitiesClient,\n itemsByFederatedId: any,\n typesByTypePath?: Record<string, Type>,\n ) {\n const operations = this.createFullLoadOperations(loaderProcess, groupedData);\n return this.runLoaderOperations(operations, itemsByFederatedId, client, typesByTypePath);\n }\n\n private static createPartialLoadOperations(loaderProcess: LoaderProcess, groupedData: Record<string, any[]>) {\n const assortmentLoadOperations: PartialAssortmentLoadOperation[] = [];\n // Can run in parallel\n for (const valueToAssortment of loaderProcess.assortmentSplit.values) {\n console.debug('Loading: ', valueToAssortment);\n console.debug('Rows', groupedData[valueToAssortment.value]?.length);\n\n const rowsToLoad = groupedData[valueToAssortment.value] || [];\n const rowsToAdd = rowsToLoad.filter((row) => !row[loaderProcess.assortmentSplit.dropField]);\n const rowsToDrop = rowsToLoad.filter((row) => row[loaderProcess.assortmentSplit.dropField]);\n if (!rowsToAdd.length && !rowsToDrop.length) {\n console.debug(`No rows to add, drop, or update for valueToAssortment ${valueToAssortment.value}, skipping...`);\n continue;\n }\n assortmentLoadOperations.push({\n rowsToAdd,\n rowsToDrop,\n rowsToUpdate: [], // will be filled in later\n assortmentId: valueToAssortment.assortmentId,\n assortmentIdentifier: valueToAssortment.assortmentIdentifier,\n });\n }\n return assortmentLoadOperations;\n }\n\n private static createFullLoadOperations(loaderProcess: LoaderProcess, groupedData: Record<string, any[]>) {\n const assortmentLoadOperations: AssortmentLoadOperation[] = [];\n // Can run in parallel\n for (const valueToAssortment of loaderProcess.assortmentSplit.values) {\n console.debug('Loading: ', valueToAssortment);\n console.debug('Rows', groupedData[valueToAssortment.value]?.length);\n const rowsToLoad = groupedData[valueToAssortment.value] || [];\n if (!rowsToLoad.length) {\n console.debug(`No rows to load for valueToAssortment ${valueToAssortment.value}, skipping...`);\n continue;\n }\n assortmentLoadOperations.push({\n rowsToLoad,\n assortmentId: valueToAssortment.assortmentId,\n assortmentIdentifier: valueToAssortment.assortmentIdentifier,\n });\n }\n return assortmentLoadOperations;\n }\n\n private static async runPartialLoaderOperations(\n operations: PartialAssortmentLoadOperation[],\n client: EntitiesClient,\n itemsByFederatedId: any,\n typesByTypePath?: Record<string, Type>,\n ) {\n const results = await Promise.all(\n operations.map((operation) =>\n PartialAssortmentProcessor.loadCSVJson(operation, client, itemsByFederatedId, typesByTypePath),\n ),\n );\n\n const allBadRows = flatMap(results, (result) => result.badAssortmentItems || []);\n const incomingAssortmentItems = flatMap(results, (result) => result.incomingAssortmentItems || []);\n\n return {\n badAssortmentItems: allBadRows,\n assortmentDetails: results,\n incomingAssortmentItems,\n };\n }\n\n private static async runLoaderOperations(\n operations: AssortmentLoadOperation[],\n itemsByFederatedId: any,\n client: EntitiesClient,\n typesByTypePath?: Record<string, Type>,\n ) {\n const results = await Promise.all(\n operations.map((operation) =>\n this.loadCSVJson(\n client,\n operation.rowsToLoad,\n itemsByFederatedId,\n operation.assortmentId,\n operation.assortmentIdentifier,\n typesByTypePath,\n ),\n ),\n );\n\n const allBadRows = flatMap(results, (result) => result.badAssortmentItems || []);\n const incomingAssortmentItems = flatMap(results, (result) => result.incomingAssortmentItems || []);\n\n return {\n badAssortmentItems: allBadRows,\n assortmentDetails: results,\n incomingAssortmentItems,\n };\n }\n\n public static async loadCSVJson(\n client: EntitiesClient,\n data: any[],\n itemsByFederatedId: any,\n assortmentId?: string,\n assortmentIdentifier?: string,\n typesByTypePath?: Record<string, Type>,\n ) {\n try {\n const result = await this.loadObjects(\n client,\n data,\n itemsByFederatedId,\n assortmentId,\n assortmentIdentifier,\n typesByTypePath,\n );\n\n if (result.badAssortmentItems) {\n console.warn('Assortment-Items missing required properties: ', result.badAssortmentItems);\n }\n return result;\n } catch (error) {\n console.error('Error loading CSV JSON:', error);\n throw error;\n }\n }\n\n private static async loadObjects(\n client: EntitiesClient,\n data: any[],\n passedItemsByFederatedId: any,\n assortmentId?: string,\n assortmentIdentifier?: string,\n typesByTypePath?: Record<string, Type>,\n ) {\n const { allPropertiesSlugs, typePropertyToValueType } = await getAssortmentItemProperties(\n client,\n this.requiredProperties,\n typesByTypePath,\n );\n\n console.debug('using assortment types:', JSON.stringify({ allPropertiesSlugs, typePropertyToValueType }, null, 2));\n\n const { incomingAssortmentItems, badAssortmentItems } = this.processIncomingData(\n data,\n allPropertiesSlugs,\n typePropertyToValueType,\n );\n\n const targetAssortment = await getAssortment(client, assortmentId, assortmentIdentifier, data);\n\n if (!targetAssortment) {\n const errorMessage = 'Target Assortment not found.';\n console.error(errorMessage);\n throw new Error(errorMessage);\n }\n\n const currentAssortmentItems = await getAssortmentItems(targetAssortment);\n console.debug('Got current assortment-items: ', currentAssortmentItems?.length);\n\n targetAssortment.assortmentItems = currentAssortmentItems;\n\n let itemsByFederatedId = passedItemsByFederatedId;\n if (!(Object.keys(passedItemsByFederatedId)?.length > 0) && incomingAssortmentItems.length > 0) {\n itemsByFederatedId = await getItemsFromFederatedIds(client, incomingAssortmentItems);\n }\n\n const { completeIncomingAssortmentItems, unmappedAssortmentItems } = mapAssortmentItemsToItemsAndFillItemId(\n incomingAssortmentItems,\n itemsByFederatedId,\n );\n\n console.debug(`unmappedAssortmentItems: ${unmappedAssortmentItems?.length}`);\n\n // get all family Ids that have options\n const assortmentOptionItemsByFamilyFedId = {}; // all non-family (used to remove family keys)\n for (const completeIncomingAssortmentItem of completeIncomingAssortmentItems) {\n const itemOptionFederatedId = completeIncomingAssortmentItem.itemOptionFederatedId;\n const itemFamilyFederatedId = completeIncomingAssortmentItem.itemFamilyFederatedId;\n\n if (!itemOptionFederatedId && itemFamilyFederatedId) {\n delete completeIncomingAssortmentItem.itemFamilyFederatedId;\n } else if (itemOptionFederatedId && itemFamilyFederatedId) {\n if (!assortmentOptionItemsByFamilyFedId[itemFamilyFederatedId]) {\n assortmentOptionItemsByFamilyFedId[itemFamilyFederatedId] = [];\n }\n delete completeIncomingAssortmentItem.itemOptionFederatedId;\n delete completeIncomingAssortmentItem.itemFamilyFederatedId;\n assortmentOptionItemsByFamilyFedId[itemFamilyFederatedId].push(completeIncomingAssortmentItem);\n }\n }\n\n const familyFederatedIdsToRemove = Object.keys(assortmentOptionItemsByFamilyFedId);\n console.debug(`familyFederatedIdsToRemove: ${familyFederatedIdsToRemove?.length}`);\n\n const familyIdsToRemove = familyFederatedIdsToRemove.map((fedId) => itemsByFederatedId[fedId]?.id);\n console.debug(`familyIdsToRemove: ${familyIdsToRemove?.length}`);\n\n console.debug(\n `Assortment-Item hydration complete. ${completeIncomingAssortmentItems?.length} complete incomingAssortmentItems`,\n );\n\n const fullSummary = this.getSummary(\n completeIncomingAssortmentItems,\n currentAssortmentItems,\n allPropertiesSlugs,\n typePropertyToValueType,\n familyIdsToRemove,\n );\n\n this.logSummary(fullSummary);\n delete fullSummary.unchanged;\n\n return {\n badAssortmentItems,\n assortment: targetAssortment,\n fullSummary,\n incomingAssortmentItems,\n };\n }\n\n private static logSummary(summary: EntityComparisonSummary) {\n console.info(`Total Adds: ${summary.adds?.length}`);\n console.info(`Total Deletes: ${summary.deletes?.length}`);\n console.info(`Total Updates: ${summary.updates?.length}`);\n console.info(`Total Unchanged: ${summary.unchanged?.length}`);\n }\n\n private static processIncomingData(data: any[], allPropertiesSlugs: string[], typePropertyToValueType: any) {\n const incomingAssortmentItems = [];\n const badAssortmentItems = [];\n\n data.forEach((row) => {\n if (!row.itemFamilyFederatedId) {\n badAssortmentItems.push(row);\n return;\n }\n const assortmentItem = {};\n // tslint:disable-next-line: forin\n for (const propertyName in row) {\n addProperty(\n propertyName,\n allPropertiesSlugs,\n typePropertyToValueType[propertyName],\n assortmentItem,\n row[propertyName],\n );\n }\n if (!row.loaderIsDropped) incomingAssortmentItems.push(assortmentItem);\n });\n\n console.debug('Got incoming assortment-items: ', incomingAssortmentItems?.length);\n\n return { incomingAssortmentItems, badAssortmentItems };\n }\n\n private static getSummary(\n incomingItems: any[],\n currentItems: any[],\n allProperties: string[],\n typePropertyToValueType: any,\n familyIdsToRemove: string[],\n ) {\n const incomingComparable = convertToComparableEntities(incomingItems, allProperties, 'itemId');\n\n const currentComparable = convertToComparableEntities(currentItems, allProperties, 'itemId');\n\n console.debug(`incomingAssortmentComparableEntities count: ${incomingComparable?.length}`);\n console.debug(`targetAssortmentComparableEntities count: ${currentComparable?.length}`);\n\n incomingComparable.forEach((entity) =>\n Object.keys(entity).forEach((key) => parseDateOrNumberKey(entity, key, typePropertyToValueType[key])),\n );\n\n currentComparable.forEach((entity) =>\n Object.keys(entity).forEach((key) => parseDateOrNumberKey(entity, key, typePropertyToValueType[key])),\n );\n\n const summary = compareEntityCollections(currentComparable, incomingComparable, 'id');\n\n const addsMap = {};\n const updatesMap = {};\n const deletesMap = {};\n const unchangedMap = {};\n\n for (const add of summary.adds) {\n addsMap[add.id] = add;\n }\n\n for (const update of summary.updates) {\n updatesMap[update.id] = update;\n }\n\n for (const del of summary.deletes) {\n deletesMap[del.id] = del;\n }\n\n for (const unchanged of summary.unchanged) {\n unchangedMap[unchanged.id] = unchanged;\n }\n\n const removedFamilyAdds = [];\n const removedFamilyUpdates = [];\n const removedFamilyDeletes = [];\n const removedFamilyUnchanged = [];\n\n // tslint:disable-next-line: forin\n for (const familyIdToRemove of familyIdsToRemove) {\n if (addsMap[familyIdToRemove]) {\n removedFamilyAdds.push(addsMap[familyIdToRemove]);\n delete addsMap[familyIdToRemove];\n }\n\n if (updatesMap[familyIdToRemove]) {\n removedFamilyUpdates.push(updatesMap[familyIdToRemove]);\n delete updatesMap[familyIdToRemove];\n }\n\n if (deletesMap[familyIdToRemove]) {\n removedFamilyDeletes.push(deletesMap[familyIdToRemove]);\n delete deletesMap[familyIdToRemove];\n }\n\n if (unchangedMap[familyIdToRemove]) {\n removedFamilyUnchanged.push(unchangedMap[familyIdToRemove]);\n delete unchangedMap[familyIdToRemove];\n }\n }\n\n console.debug('Removed Family Adds: ', JSON.stringify(removedFamilyAdds));\n console.debug('Removed Family Updates: ', JSON.stringify(removedFamilyUpdates));\n console.debug('Removed Family Deletes: ', JSON.stringify(removedFamilyDeletes));\n console.debug('Removed Family Unchanged: ', JSON.stringify(removedFamilyUnchanged));\n\n summary.adds = Object.values(addsMap);\n summary.updates = Object.values(updatesMap);\n summary.deletes = Object.values(deletesMap);\n summary.unchanged = Object.values(unchangedMap);\n\n return summary;\n }\n\n public static getEntityTypeForFederatedId(entityType: EntityType): EntityType {\n return EntityType.ITEM;\n }\n}\n","import { ComparableEntity } from '@contrail/entity-compare';\nimport { EntitiesClient, PropertyType } from '@contrail/entity-types';\nimport { chunk, uniq } from 'lodash';\nimport { EntitiesLambdaCallType, retryOnTimeout } from '../../common/entities-helper';\nimport { Type } from '@contrail/types';\n\nconst pLimit = require('p-limit');\nconst limit = pLimit(5);\n\n// Type for request-scoped object type cache\nexport type ObjectTypeCache = Map<string, any>;\n\nexport async function getAssortmentItems(targetAssortment) {\n if (targetAssortment.assortmentItems) {\n return targetAssortment.assortmentItems;\n } else if (targetAssortment.itemsDownloadURL) {\n return fetchJSON(targetAssortment.itemsDownloadURL);\n }\n return [];\n}\n\nasync function fetchJSON(url: string): Promise<any[]> {\n try {\n const response = await fetch(url);\n return await response.json();\n } catch (error) {\n console.error(`Error fetching JSON from ${url}:`, error);\n throw error;\n }\n}\n\nexport async function getAssortmentItemProperties(\n client: EntitiesClient,\n requiredNonTypeProperties: string[],\n typesByTypePath?: Record<string, Type>,\n): Promise<{\n allPropertiesSlugs: string[];\n typePropertyToValueType: { [key: string]: PropertyType };\n}> {\n const typePath = 'assortment-item';\n const cachedType = typesByTypePath?.[typePath];\n const objType = cachedType ? cachedType : await fetchObjectType(client, typePath);\n\n const typeProperties = objType?.typeProperties?.map((property) => property.slug) ?? [];\n const typePropertyToValueType = mapTypePropertiesToValueType(objType?.typeProperties);\n\n const allPropertiesSlugs = [...typeProperties, ...requiredNonTypeProperties];\n\n return { allPropertiesSlugs, typePropertyToValueType };\n}\n\nasync function fetchObjectType(client: EntitiesClient, path: string) {\n try {\n const suffix = `roots/${path}/path/${path}`;\n const objType = await client.get({\n entityName: 'type',\n suffix,\n relations: ['typeProperties'],\n });\n\n return objType;\n } catch (error) {\n console.error('Error fetching object type:', error);\n throw new Error('Invalid Type');\n }\n}\n\nfunction mapTypePropertiesToValueType(typeProperties: any[]): { [key: string]: PropertyType } {\n return (\n typeProperties?.reduce((acc, property) => {\n acc[property.slug] = property.propertyType;\n return acc;\n }, {}) || {}\n );\n}\n\nexport async function getItemsFromFederatedIds(\n client: EntitiesClient,\n incomingRows: any[],\n): Promise<{ [key: string]: any }> {\n const federatedIds = extractUniqueFederatedIds(incomingRows);\n const chunks = chunk(federatedIds, 200);\n const allCurrentItemsByFederatedId = await fetchItemsByFederatedIds(client, chunks);\n return allCurrentItemsByFederatedId;\n}\n\nfunction extractUniqueFederatedIds(incomingRows: any[]): string[] {\n const allFederatedIds = incomingRows\n .flatMap((row) => [\n row.itemFamilyFederatedId?.replace(/\\//g, '%2F'),\n row.itemOptionFederatedId?.replace(/\\//g, '%2F'),\n ])\n .filter(Boolean);\n\n const uniqueFederatedIds = uniq(allFederatedIds);\n return uniqueFederatedIds;\n}\n\nasync function fetchItemsByFederatedIds(client: EntitiesClient, chunks: string[][]): Promise<{ [key: string]: any }> {\n const allCurrentItemsByFederatedId = {};\n const federatedPromises = chunks.map((chunk) =>\n limit(async () => {\n try {\n const currentItemBatch = await retryOnTimeout(client, EntitiesLambdaCallType.GET, {\n entityName: 'item',\n federatedIds: chunk,\n skipHydrateRelationships: true,\n });\n if (currentItemBatch?.length) {\n currentItemBatch.forEach((item) => {\n allCurrentItemsByFederatedId[item.federatedId] = item;\n });\n }\n } catch (error) {\n console.error('Failed to get items by FederatedIds:', error);\n throw error;\n }\n }),\n );\n\n await Promise.all(federatedPromises);\n return allCurrentItemsByFederatedId;\n}\n\nexport function mapAssortmentItemsToItemsAndFillItemId(incomingAssortmentItems: any[], itemsByFederatedId: any) {\n const completeIncomingAssortmentItems = [];\n const unmappedAssortmentItems = [];\n\n if (!incomingAssortmentItems || !incomingAssortmentItems?.length || !Object.keys(itemsByFederatedId)?.length) {\n return { completeIncomingAssortmentItems, unmappedAssortmentItems };\n }\n\n incomingAssortmentItems.forEach((assortmentItem) => {\n const item = findItemByFederatedId(assortmentItem, itemsByFederatedId);\n if (item) {\n assortmentItem.itemId = item.id;\n completeIncomingAssortmentItems.push(assortmentItem);\n } else {\n unmappedAssortmentItems.push(assortmentItem);\n logUnmappedItem(assortmentItem);\n }\n });\n return { completeIncomingAssortmentItems, unmappedAssortmentItems };\n}\n\nfunction findItemByFederatedId(assortmentItem: any, itemsByFederatedId: any) {\n return (\n itemsByFederatedId[assortmentItem.itemOptionFederatedId] || itemsByFederatedId[assortmentItem.itemFamilyFederatedId]\n );\n}\n\nfunction logUnmappedItem(assortmentItem: any) {\n const federatedId = assortmentItem.itemOptionFederatedId || assortmentItem.itemFamilyFederatedId;\n console.warn('Item not found for federatedId:', federatedId);\n}\n\nexport function convertToComparableEntities(\n comparableItems: any[],\n assortmentItemProperties: string[],\n idFieldName: string,\n): ComparableEntity[] {\n return comparableItems\n .filter((item) => item[idFieldName])\n .map((item) => createComparableEntity(item, assortmentItemProperties, idFieldName));\n}\n\nfunction createComparableEntity(item: any, properties: string[], idFieldName: string): ComparableEntity {\n const comparableEntity: ComparableEntity = { id: item[idFieldName] };\n properties.forEach((property) => {\n if (item[property]) {\n comparableEntity[property] = item[property];\n }\n });\n return removeUnnecessaryKeys(comparableEntity);\n}\n\nfunction removeUnnecessaryKeys(object: any): any {\n const keysToRemove = [\n 'itemOptionId',\n 'itemId',\n 'typeId',\n 'assortmentId',\n 'createdOn',\n 'createdBy',\n 'createdById',\n 'updatedOn',\n 'updatedBy',\n 'updatedById',\n 'pk',\n 'persistent',\n 'item',\n ];\n keysToRemove.forEach((key) => delete object[key]);\n return object;\n}\n\nexport async function getAssortment(\n ctx: any,\n passedAssortmentId: string,\n passedAssortmentIdentifier: string,\n data: any[],\n) {\n const assortmentId = passedAssortmentId || extractAssortmentIdFromData(data);\n if (!assortmentId && !passedAssortmentIdentifier) {\n throw new Error('No assortmentId or assortmentIdentifier provided.');\n }\n\n return assortmentId\n ? await fetchAssortmentById(ctx, assortmentId)\n : await fetchAssortmentByIdentifier(ctx, passedAssortmentIdentifier);\n}\n\nfunction extractAssortmentIdFromData(data: any[]): string | undefined {\n return data?.[0]?.assortmentId;\n}\n\nasync function fetchAssortmentById(ctx: any, assortmentId: string) {\n return retryOnTimeout(ctx, EntitiesLambdaCallType.GET, {\n entityName: 'assortment',\n id: assortmentId,\n relations: ['assortmentItems'],\n skipHydrateRelationships: true,\n });\n}\n\nasync function fetchAssortmentByIdentifier(ctx: any, identifier: string) {\n const assortments = await retryOnTimeout(ctx, EntitiesLambdaCallType.GET, {\n entityName: 'assortment',\n criteria: { identifier },\n relations: ['assortmentItems'],\n skipHydrateRelationships: true,\n });\n return assortments?.[0];\n}\n","import {\n EntitiesClient,\n EntityType,\n GeneralIssueDetails,\n LoaderProcess,\n ProcessingIssues,\n} from '@contrail/entity-types';\n\nexport class BaseProcessorV2 {\n static requiredProperties: string[] = [];\n\n static transformData(data: any[]): any[] {\n return data;\n }\n\n public static getTypePath(row, entityType) {\n return row?.typePath || entityType;\n }\n\n static processFederatedId(federatedId: string, typePath: string): string {\n return federatedId;\n }\n\n static getEntityTypeForFederatedId(entityType: EntityType): EntityType {\n return entityType;\n }\n\n static validateRow(row: { [key: string]: string }): boolean {\n return !!row.federatedId;\n }\n\n static setExtraProperties(entity: any, type: any, row?: any): void {}\n\n static async assignExtraItems(client, typePaths, typesByPath, incomingItems, projectId: string): Promise<any> {\n return {\n itemsByFamilyId: null,\n sizeRangeWarningsAsStringList: null,\n };\n }\n\n public static getFederatedIdKeys() {\n return ['federatedId'];\n }\n\n public static logIncommingEntities(incomingEntities: any[], entityType: string, result: any) {\n console.debug(`${entityType}s to upload: `, incomingEntities.length);\n }\n\n static validateLoadFile(\n data: any[],\n config: LoaderProcess,\n ): {\n errors: ProcessingIssues[];\n warnings: ProcessingIssues[];\n generalErrors: GeneralIssueDetails[];\n generalWarnings: GeneralIssueDetails[];\n } {\n return {\n errors: [],\n warnings: [],\n generalErrors: [],\n generalWarnings: [],\n };\n }\n\n public static async processEntitiesProperties(\n client: EntitiesClient,\n entitiSpecificProps: any,\n data: any[],\n ): Promise<{ projectId: string | null }> {\n return { projectId: null };\n }\n\n public static canExtractFederatedIds(entityResult: any, incomingEntities: any[]) {\n return true;\n }\n\n public static canAddProperty(allPropertiesSlugs: string[], propertyName: string): boolean {\n return true;\n }\n\n public static buildAssortmentEntities(\n client: EntitiesClient,\n rawData: any[],\n loaderProcess: LoaderProcess,\n entitySpecificProperties: any,\n ): any {\n return {};\n }\n}\n","import { EntitiesClient, EntityType } from '@contrail/entity-types';\nimport { PartialAssortmentLoadOperation } from './assortment-processor';\nimport {\n convertToComparableEntities,\n getAssortmentItemProperties,\n getAssortmentItems,\n getItemsFromFederatedIds,\n mapAssortmentItemsToItemsAndFillItemId,\n} from './item-helper';\nimport { retryOnTimeout, EntitiesLambdaCallType, parseDateOrNumberKey } from '../../common/entities-helper';\nimport { addProperty } from '../../common/entity-builder-helpers';\nimport { ComparableEntity, compareEntityCollections, EntityComparisonSummary } from '@contrail/entity-compare';\nimport { groupBy } from 'lodash';\nimport { BaseProcessorV2 } from '../base-processor-v2';\nimport { Type } from '@contrail/types';\n\nexport class PartialAssortmentProcessor extends BaseProcessorV2 {\n static requiredProperties: string[] = ['itemOptionFederatedId', 'itemFamilyFederatedId', 'assortmentId'];\n\n public static async loadCSVJson(\n partialLoadOperation: PartialAssortmentLoadOperation,\n client: EntitiesClient,\n itemsByFederatedId: any,\n typesByTypePath?: Record<string, Type>,\n ): Promise<{\n badAssortmentItems: any[];\n assortment: any;\n fullSummary: EntityComparisonSummary;\n incomingAssortmentItems: any[];\n }> {\n try {\n console.info('Start loading Assortment-Items: ', new Date(), partialLoadOperation);\n const result = await this.loadObjects(\n this.requiredProperties,\n partialLoadOperation,\n client,\n itemsByFederatedId,\n typesByTypePath,\n );\n this.logBadItems(result.badAssortmentItems);\n\n return result;\n } catch (error) {\n console.error('Error in loading Assortment-Items:', error);\n throw error;\n }\n }\n\n private static logBadItems(badItems: any[]) {\n if (badItems?.length) {\n console.warn('Assortment-Items missing required properties:', badItems);\n }\n }\n\n public static async loadObjects(\n requiredProperties: string[],\n loadOperation: PartialAssortmentLoadOperation,\n client: EntitiesClient,\n passedItemsByFederatedId: any,\n typesByTypePath?: Record<string, Type>,\n ): Promise<{\n badAssortmentItems: any[];\n assortment: any;\n fullSummary: EntityComparisonSummary;\n incomingAssortmentItems: any[];\n }> {\n const targetAssortment = await this.getTargetAssortment(\n client,\n loadOperation.assortmentId,\n loadOperation.assortmentIdentifier,\n loadOperation.rowsToAdd,\n );\n\n if (!targetAssortment) {\n const errorMessage = 'Target Assortment not found.';\n console.error(errorMessage);\n throw new Error(errorMessage);\n }\n\n const currentAssortmentItems = await getAssortmentItems(targetAssortment);\n console.debug('Got current assortment-items: ', currentAssortmentItems?.length);\n targetAssortment.assortmentItems = currentAssortmentItems;\n\n const { allPropertiesSlugs, typePropertyToValueType } = await getAssortmentItemProperties(\n client,\n requiredProperties,\n typesByTypePath,\n );\n\n const processedRows = this.processRows(loadOperation, allPropertiesSlugs, typePropertyToValueType);\n\n const itemsByFederatedId = await this.getItemsByFederatedId(\n client,\n passedItemsByFederatedId,\n processedRows.incomingAssortmentItems,\n );\n\n const completeIncomingItems = this.mapAndHydrateItems(loadOperation, itemsByFederatedId);\n\n this.getAllFamilyIdsAndOptions(currentAssortmentItems, itemsByFederatedId);\n\n const { validAdds, validDrops, validUpdates } = this.filterOperationsByCurrentAssortment(\n currentAssortmentItems,\n loadOperation,\n );\n loadOperation = { ...loadOperation, rowsToAdd: validAdds, rowsToDrop: validDrops, rowsToUpdate: validUpdates };\n\n console.debug('Add Row Count: ', loadOperation.rowsToAdd?.length);\n console.debug('Drop Row Count: ', loadOperation.rowsToDrop?.length);\n console.debug('Update Row Count: ', loadOperation.rowsToUpdate?.length);\n\n const fullSummary = this.getPartialUpdateSummary(\n loadOperation,\n currentAssortmentItems,\n allPropertiesSlugs,\n processedRows.familyIdsToRemove,\n );\n\n this.logSummary(fullSummary);\n\n delete fullSummary.unchanged;\n\n return {\n badAssortmentItems: processedRows.badItems,\n assortment: targetAssortment,\n fullSummary,\n incomingAssortmentItems: completeIncomingItems,\n };\n }\n\n private static async getTargetAssortment(\n client: EntitiesClient,\n assortmentId: string,\n assortmentIdentifier: string,\n rows: any[],\n ) {\n if (!assortmentId && rows?.length > 0) {\n assortmentId = rows[0].assortmentId;\n }\n\n if (!assortmentId && !assortmentIdentifier) {\n const errorMessage = 'No assortmentId or assortmentIdentifier provided.';\n console.error(errorMessage);\n throw new Error(errorMessage);\n }\n\n return assortmentId\n ? await this.fetchAssortmentById(client, assortmentId)\n : await this.fetchAssortmentByIdentifier(client, assortmentIdentifier);\n }\n\n private static async fetchAssortmentById(client: EntitiesClient, assortmentId: string) {\n console.debug('Getting assortment-items for ', assortmentId);\n return retryOnTimeout(client, EntitiesLambdaCallType.GET, {\n entityName: 'assortment',\n id: assortmentId,\n relations: ['assortmentItems'],\n skipHydrateRelationships: true,\n });\n }\n\n private static async fetchAssortmentByIdentifier(client: EntitiesClient, identifier: string) {\n console.debug('Getting assortment-items for assortment identifier ', identifier);\n const assortments = await retryOnTimeout(client, EntitiesLambdaCallType.GET, {\n entityName: 'assortment',\n criteria: { identifier },\n relations: ['assortmentItems'],\n skipHydrateRelationships: true,\n });\n return assortments?.[0];\n }\n\n private static processRows(\n loadOperation: PartialAssortmentLoadOperation,\n allPropertiesSlugs: string[],\n typePropertyToValueType: any,\n ) {\n const badItems = [];\n const incomingAssortmentItems = [];\n\n ['rowsToAdd', 'rowsToDrop', 'rowsToUpdate'].forEach((key) => {\n const { badAssortmentItems, processedAssortmentItems } = this.processAssortmentItemRow(\n loadOperation[key],\n allPropertiesSlugs,\n typePropertyToValueType,\n );\n badItems.push(...badAssortmentItems);\n loadOperation[key] = processedAssortmentItems;\n incomingAssortmentItems.push(...processedAssortmentItems);\n });\n\n const familyIdsToRemove = this.getFamilyIdsToRemove(incomingAssortmentItems);\n\n return { badItems, incomingAssortmentItems, familyIdsToRemove };\n }\n\n private static processAssortmentItemRow(rows: any[], allPropertiesSlugs: string[], typePropertyToValueType: any) {\n const badAssortmentItems = [];\n const processedAssortmentItems = [];\n for (const row of rows) {\n if (!row.itemFamilyFederatedId) {\n badAssortmentItems.push(row);\n continue;\n }\n\n const assortmentItem = {};\n // tslint:disable-next-line: forin\n for (const propertyName in row) {\n addProperty(\n propertyName,\n allPropertiesSlugs,\n typePropertyToValueType[propertyName],\n assortmentItem,\n row[propertyName],\n );\n }\n processedAssortmentItems.push(assortmentItem);\n }\n return { badAssortmentItems, processedAssortmentItems };\n }\n\n private static async getItemsByFederatedId(\n client: EntitiesClient,\n itemsByFederatedId: any,\n incomingAssortmentItems: any[],\n ) {\n if (!Object.keys(itemsByFederatedId)?.length && incomingAssortmentItems.length) {\n return getItemsFromFederatedIds(client, incomingAssortmentItems);\n }\n return itemsByFederatedId;\n }\n\n private static mapAndHydrateItems(loadOperation: PartialAssortmentLoadOperation, itemsByFederatedId: any) {\n const completeIncomingItems = [];\n const unmappedItems = [];\n ['rowsToAdd', 'rowsToDrop', 'rowsToUpdate'].forEach((key) => {\n const { completeIncomingAssortmentItems, unmappedAssortmentItems } = mapAssortmentItemsToItemsAndFillItemId(\n loadOperation[key],\n itemsByFederatedId,\n );\n completeIncomingItems.push(...completeIncomingAssortmentItems);\n unmappedItems.push(...unmappedAssortmentItems);\n });\n\n console.debug(`unmappedAssortmentItems: ${unmappedItems?.length}`);\n return completeIncomingItems;\n }\n\n private static getFamilyIdsToRemove(incomingAssortmentItems: any[]) {\n const familyIds = groupBy(incomingAssortmentItems, 'itemFamilyFederatedId');\n return Object.keys(familyIds).filter((id) => familyIds[id].some((item) => item.itemOptionFederatedId));\n }\n\n private static getAllFamilyIdsAndOptions(completeIncomingAssortmentItems: any[], itemsByFederatedId) {\n // get all family Ids that have options\n const assortmentOptionItemsByFamilyFedId = {}; // all non-family (used to remove family keys)\n for (const completeIncomingAssortmentItem of completeIncomingAssortmentItems) {\n const itemOptionFederatedId = completeIncomingAssortmentItem.itemOptionFederatedId;\n const itemFamilyFederatedId = completeIncomingAssortmentItem.itemFamilyFederatedId;\n\n if (!itemOptionFederatedId && itemFamilyFederatedId) {\n delete completeIncomingAssortmentItem.itemFamilyFederatedId;\n } else if (itemOptionFederatedId && itemFamilyFederatedId) {\n if (!assortmentOptionItemsByFamilyFedId[itemFamilyFederatedId]) {\n assortmentOptionItemsByFamilyFedId[itemFamilyFederatedId] = [];\n }\n delete completeIncomingAssortmentItem.itemOptionFederatedId;\n delete completeIncomingAssortmentItem.itemFamilyFederatedId;\n assortmentOptionItemsByFamilyFedId[itemFamilyFederatedId].push(completeIncomingAssortmentItem);\n }\n }\n\n const familyFederatedIdsToRemove = Object.keys(assortmentOptionItemsByFamilyFedId);\n console.debug(`familyFederatedIdsToRemove: ${familyFederatedIdsToRemove?.length}`);\n\n const familyIdsToRemove = familyFederatedIdsToRemove.map((fedId) => itemsByFederatedId[fedId]?.id);\n console.debug(`familyIdsToRemove: ${familyIdsToRemove?.length}`);\n\n console.debug(\n `Assortment-Item hydration complete. ${completeIncomingAssortmentItems?.length} complete incomingAssortmentItems`,\n );\n }\n\n private static filterOperationsByCurrentAssortment(\n currentAssortmentItems: { itemId: string }[],\n loadOperation: PartialAssortmentLoadOperation,\n ): {\n validAdds: { itemId: string }[];\n validDrops: { itemId: string }[];\n validUpdates: { itemId: string }[];\n } {\n const currentItemIds = new Set(currentAssortmentItems.map((item) => item.itemId));\n\n const { rowsToAdd, rowsToDrop, rowsToUpdate } = loadOperation;\n const validAdds = rowsToAdd.filter((row) => row.itemId && !currentItemIds.has(row.itemId));\n const addsAlreadyExist = rowsToAdd.filter((row) => row.itemId && currentItemIds.has(row.itemId));\n const validUpdates = rowsToUpdate.filter((row) => row.itemId && currentItemIds.has(row.itemId));\n const validDrops = rowsToDrop.filter((row) => row.itemId && currentItemIds.has(row.itemId));\n\n const allValidUpdates = [...validUpdates, ...addsAlreadyExist];\n\n return {\n validAdds,\n validDrops,\n validUpdates: allValidUpdates,\n };\n }\n\n private static getPartialUpdateSummary(\n loadOperation: PartialAssortmentLoadOperation,\n currentAssortmentItems: any[],\n allPropertiesSlugs: string[],\n familyIdsToRemove: string[],\n ) {\n const comparableEntitiesAdds = convertToComparableEntities(loadOperation.rowsToAdd, allPropertiesSlugs, 'itemId');\n const comparableEntitiesDrop = convertToComparableEntities(loadOperation.rowsToDrop, allPropertiesSlugs, 'itemId');\n const comparableEntitiesUpdate = convertToComparableEntities(\n loadOperation.rowsToUpdate,\n allPropertiesSlugs,\n 'itemId',\n );\n const targetAssortmentComparableEntities = convertToComparableEntities(\n currentAssortmentItems,\n allPropertiesSlugs,\n 'itemId',\n );\n\n console.debug(`comparableEntitiesUpdate count: ${comparableEntitiesUpdate?.length}`);\n console.debug(`targetAssortmentComparableEntities count: ${targetAssortmentComparableEntities?.length}`);\n\n for (const entityList of [\n comparableEntitiesAdds,\n comparableEntitiesDrop,\n comparableEntitiesUpdate,\n targetAssortmentComparableEntities,\n targetAssortmentComparableEntities,\n ]) {\n this.processComparableEntitiesProperties(entityList);\n }\n\n const updatesSummary = compareEntityCollections(targetAssortmentComparableEntities, comparableEntitiesUpdate, 'id');\n\n const updatesMap = {};\n const unchangedMap = {};\n for (const update of updatesSummary.updates) {\n updatesMap[update.id] = update;\n }\n for (const unchanged of updatesSummary.unchanged) {\n unchangedMap[unchanged.id] = unchanged;\n }\n\n const removedFamilyUpdates = [];\n const removedFamilyUnchanged = [];\n\n // tslint:disable-next-line: forin\n for (const familyIdToRemove of familyIdsToRemove) {\n if (updatesMap[familyIdToRemove]) {\n removedFamilyUpdates.push(updatesMap[familyIdToRemove]);\n delete updatesMap[familyIdToRemove];\n }\n\n if (unchangedMap[familyIdToRemove]) {\n removedFamilyUnchanged.push(unchangedMap[familyIdToRemove]);\n delete unchangedMap[familyIdToRemove];\n }\n }\n\n console.debug('Removed Family Updates: ', JSON.stringify(removedFamilyUpdates));\n console.debug('Removed Family Unchanged: ', JSON.stringify(removedFamilyUnchanged));\n const summary: EntityComparisonSummary = {} as EntityComparisonSummary;\n summary.adds = comparableEntitiesAdds;\n summary.updates = Object.values(updatesMap);\n summary.deletes = comparableEntitiesDrop;\n summary.unchanged = Object.values(unchangedMap);\n\n return summary;\n }\n\n private static logSummary(summary: EntityComparisonSummary) {\n console.info(`Total Adds: ${summary.adds?.length}`);\n console.info(`Total Deletes: ${summary.deletes?.length}`);\n console.info(`Total Updates: ${summary.updates?.length}`);\n console.info(`Total Unchanged: ${summary.unchanged?.length}`);\n }\n\n private static processComparableEntitiesProperties(incomingAssortmentComparableEntities: ComparableEntity[]) {\n for (const incomingAssortmentComparableEntity of incomingAssortmentComparableEntities) {\n const incomingKeys = Object.keys(incomingAssortmentComparableEntity);\n for (const key of incomingKeys) {\n parseDateOrNumberKey(incomingAssortmentComparableEntity, key);\n }\n }\n }\n\n public static getEntityTypeForFederatedId(entityType: EntityType): EntityType {\n return EntityType.ITEM;\n }\n}\n","import { EntityType, GeneralIssueDetails, IssueType, LoadType, ProcessingIssues } from '@contrail/entity-types';\nimport { BaseProcessorV2 } from '../base-processor-v2';\nimport {\n getConflictingFederatedIdsGroupedByField,\n getConflictingFieldForFederatedId,\n getDuplicateFederatedIds,\n} from '../../common/util';\nimport { assignUserLists } from '../../common/entities-helper';\nimport { SizeRangeSanitizer } from '../../common/size-range-helpers';\nimport { EntityProcessorV2 } from '../entity-processor-v2';\nimport { ENTITY_PROCESSOR_ERRORS, ITEM_PROCESSOR_ERRORS, ITEM_PROCESSOR_WARNINGS } from '../../constants';\nimport { ColumnDefinitionEvaluator } from '../../common/conditional-columns';\n\nexport interface ItemData {\n [key: string]: any;\n}\n\nexport class ItemProcessor extends BaseProcessorV2 {\n static requiredProperties: string[] = [\n 'typePath',\n 'typeId',\n 'itemOptionFederatedId',\n 'itemFamilyFederatedId',\n 'optionGroup',\n 'optionName',\n ];\n\n static setExtraProperties(entity: any, type: any): void {\n entity.typeId = type.type.id;\n entity.typePath = type.type.typePath;\n }\n\n static validateRow(row: { itemFamilyFederatedId: string }): boolean {\n return !!row.itemFamilyFederatedId;\n }\n\n static async assignExtraItems(client, typePaths, typesByPath, incomingItems) {\n await assignUserLists(client, typePaths, typesByPath, incomingItems);\n // clean up size ranges. Currently only supporting size ranges for top level item type\n const sizeRangeSanitizer = new SizeRangeSanitizer();\n await sizeRangeSanitizer.sanitizeSizeRanges(client, typesByPath, incomingItems);\n // NOTE: in the future we should pass these objects directly to the frontend and let it handle error parsing\n const sizeRangeWarningsAsStringList = sizeRangeSanitizer.getWarningsAsStringList();\n\n // All incoming items\n const itemsByFamilyId: {\n [key: string]: any[];\n } = {};\n for (const item of incomingItems) {\n if (!itemsByFamilyId[item.itemFamilyFederatedId]) {\n itemsByFamilyId[item.itemFamilyFederatedId] = [];\n }\n\n itemsByFamilyId[item.itemFamilyFederatedId].push(item);\n }\n\n return {\n itemsByFamilyId,\n sizeRangeWarningsAsStringList,\n };\n }\n\n public static logIncommingEntities(incomingEntities: any[], entityType: string, result: any) {\n const familyCount = Object.keys(result?.itemsByFamilyId ?? {}).length;\n const optionCount = incomingEntities.filter((e) => e.itemOptionFederatedId).length;\n console.debug(\n `Item load: ${incomingEntities.length} CSV rows → ${familyCount} families, ${optionCount} options`,\n );\n }\n\n public static getFederatedIdKeys() {\n return ['itemFamilyFederatedId', 'itemOptionFederatedId'];\n }\n\n public static getEntityTypeForFederatedId(entityType: EntityType): EntityType {\n return EntityType.ITEM;\n }\n\n public static validateLoadFile(\n data: ItemData[],\n config: any,\n ): {\n errors: ProcessingIssues[];\n warnings: ProcessingIssues[];\n generalErrors: GeneralIssueDetails[];\n generalWarnings: GeneralIssueDetails[];\n } {\n const { errors, warnings, generalErrors, generalWarnings, csvHeaders, returnImmediately } =\n EntityProcessorV2.validateLoadFile(data, config, 'itemFamilyFederatedId');\n\n if (returnImmediately) {\n return { errors, warnings, generalErrors, generalWarnings };\n }\n\n this.validateLoadType(config, generalErrors);\n this.validateTypePathMapping(config, csvHeaders, data, generalErrors);\n this.validateOptionNameMapping(config, csvHeaders, generalWarnings);\n this.validateItemOptionFederatedIdMapping(config, csvHeaders, generalWarnings);\n\n this.validateFederatedIds(data, config, errors, generalErrors, csvHeaders);\n\n return { errors, warnings, generalErrors, generalWarnings };\n }\n\n private static validateLoadType(config: any, generalErrors: GeneralIssueDetails[]) {\n if (\n config?.loadType?.length &&\n !config.loadType.every((type) => [LoadType.ITEM, LoadType.PROJECT_ITEM, LoadType.ASSORTMENT].includes(type))\n ) {\n generalErrors.push({\n message: ITEM_PROCESSOR_ERRORS.LOAD_TYPE_INVALID,\n issueType: IssueType.CONFIG,\n });\n }\n }\n\n private static validateTypePathMapping(\n config: any,\n csvHeaders: string[],\n data: ItemData[],\n generalErrors: GeneralIssueDetails[],\n ) {\n if (Array.isArray(config?.conditionalColumns) && config.conditionalColumns.length) {\n const hasTypePathColumn = config.conditionalColumns.some((column) => column.toProperty === 'typePath');\n const hasRequiredConditionalColumn = config.conditionalColumns.some(\n (column) =>\n column.toProperty === 'typePath' &&\n (column.default === 'item' ||\n (column.default?.startsWith('item:') && column.default?.split(':')[1]?.length > 0)),\n );\n\n if (hasTypePathColumn && !hasRequiredConditionalColumn) {\n generalErrors.push({\n message: ITEM_PROCESSOR_ERRORS.TYPEPATH_INVALID,\n issueType: IssueType.CONFIG,\n });\n }\n } else if (csvHeaders.includes('typePath')) {\n const hasCorrectTypePath = data.every(\n (row) =>\n row.typePath === 'item' || (row.typePath?.startsWith('item:') && row.typePath?.split(':')[1]?.length > 0),\n );\n if (!hasCorrectTypePath) {\n generalErrors.push({\n message: ITEM_PROCESSOR_ERRORS.TYPEPATH_INVALID,\n issueType: IssueType.CONFIG,\n });\n }\n }\n }\n\n private static validateOptionNameMapping(config, csvHeaders, generalWarnings: GeneralIssueDetails[]) {\n // Check name in csvHeaders, federatedMapping, or conditionalColumns\n const optionNameInConditional = config?.conditionalColumns?.some((column) => column.toProperty === 'optionName');\n const optionNameInFederatedMapping = config?.federatedMappings?.optionName;\n const optionNameInCSV = csvHeaders.includes('optionName');\n\n if (!optionNameInFederatedMapping && !optionNameInCSV && !optionNameInConditional) {\n generalWarnings.push({\n message: ITEM_PROCESSOR_WARNINGS.OPTIONNAME_UNMAPPED,\n issueType: IssueType.CONFIG,\n });\n } else if (optionNameInFederatedMapping && !csvHeaders.includes(config.federatedMappings?.optionName)) {\n generalWarnings.push({\n message: ITEM_PROCESSOR_WARNINGS.OPTIONNAME_NOT_FOUND(config.federatedMappings?.optionName),\n issueType: IssueType.CONFIG,\n });\n }\n }\n\n private static validateItemOptionFederatedIdMapping(config, csvHeaders, generalWarnings: GeneralIssueDetails[]) {\n // Check optionFederatedId in csvHeaders, federatedMapping, or conditionalColumns\n const optionFederatedIdInConditional = config?.conditionalColumns?.some(\n (column) => column.toProperty === 'itemOptionFederatedId',\n );\n const optionFederatedIdInFederatedMapping = config?.federatedMappings?.itemOptionFederatedId;\n const optionFederatedIdInCSV = csvHeaders.includes('itemOptionFederatedId');\n\n if (!optionFederatedIdInFederatedMapping && !optionFederatedIdInCSV && !optionFederatedIdInConditional) {\n generalWarnings.push({\n message: ITEM_PROCESSOR_WARNINGS.OPTION_FEDERATED_ID_UNMAPPED,\n issueType: IssueType.CONFIG,\n });\n } else if (\n optionFederatedIdInFederatedMapping &&\n !csvHeaders.includes(config.federatedMappings?.itemOptionFederatedId)\n ) {\n generalWarnings.push({\n message: ITEM_PROCESSOR_WARNINGS.OPTION_FEDERATED_ID_NOT_FOUND(config.federatedMappings?.itemOptionFederatedId),\n issueType: IssueType.CONFIG,\n });\n }\n }\n\n private static validateFederatedIds(\n data: ItemData[],\n config: any,\n errors: ProcessingIssues[],\n generalErrors: GeneralIssueDetails[],\n csvHeaders: string[],\n ) {\n // Create a deep copy of data to avoid modifying the original\n const processedData = this.prepareDataWithConditionalValues(data, config);\n\n // Perform validations on the processed data\n this.validateEmptyItemFamilyFederatedIds(processedData, config, errors);\n this.validateConflictingFederatedIds(processedData, config, generalErrors, errors, csvHeaders);\n }\n\n /**\n * Creates a deep copy of data and applies conditional column values\n */\n private static prepareDataWithConditionalValues(data: ItemData[], config: any): ItemData[] {\n // Create deep copy using structured clone or JSON methods\n const dataCopy = JSON.parse(JSON.stringify(data));\n\n // Extract conditional column configurations\n const familyFederatedIdColumn = this.findConditionalColumn(config, 'itemFamilyFederatedId');\n const familyNameColumn = this.findConditionalColumn(config, 'name');\n\n const optionFederatedIdColumn = this.findConditionalColumn(config, 'itemOptionFederatedId');\n\n // Apply conditional values only if needed\n if (!familyFederatedIdColumn && !familyNameColumn && !optionFederatedIdColumn) {\n return dataCopy;\n }\n\n // Process each row with the conditional values\n return dataCopy.map((row) => {\n const processedRow = { ...row };\n\n if (familyFederatedIdColumn) {\n processedRow.itemFamilyFederatedId = ColumnDefinitionEvaluator.getValue(familyFederatedIdColumn.default, row);\n }\n\n if (familyNameColumn) {\n processedRow.name = ColumnDefinitionEvaluator.getValue(familyNameColumn.default, row);\n }\n\n if (optionFederatedIdColumn) {\n processedRow.itemOptionFederatedId = ColumnDefinitionEvaluator.getValue(optionFederatedIdColumn.default, row);\n }\n\n return processedRow;\n });\n }\n\n /**\n * Finds a conditional column configuration by property name\n */\n private static findConditionalColumn(config: any, propertyName: string): any {\n const column = config?.conditionalColumns?.find((col) => col.toProperty === propertyName);\n\n return column && Object.keys(column).length ? column : null;\n }\n\n private static validateEmptyItemFamilyFederatedIds(data: ItemData[], config: any, errors: ProcessingIssues[]) {\n const itemFamilyFederatedIdKey = config.federatedMappings?.itemFamilyFederatedId || 'itemFamilyFederatedId';\n\n for (const [index, row] of data.entries()) {\n const familyFedId = row[itemFamilyFederatedIdKey];\n\n if (!familyFedId || familyFedId === '') {\n errors.push({\n rowNumber: index,\n columnIssues: [\n {\n columnName: config.federatedMappings?.itemFamilyFederatedId,\n message: ITEM_PROCESSOR_ERRORS.FAMILY_ID_EMPTY,\n issueType: IssueType.CONFIG,\n data: JSON.stringify(row),\n },\n ],\n });\n }\n }\n }\n\n private static validateConflictingFederatedIds(\n data: ItemData[],\n config: any,\n generalErrors: GeneralIssueDetails[],\n errors: ProcessingIssues[],\n csvHeaders: string[],\n ) {\n const itemFamilyFederatedId = config?.federatedMappings?.itemFamilyFederatedId || 'itemFamilyFederatedId';\n const itemfamilyName = config?.federatedMappings?.name || 'name';\n\n const familyNameInConditional = config?.conditionalColumns?.some((column) => column.toProperty === 'name');\n const isFamilyNameMapped = Boolean(\n config?.federatedMappings?.name || csvHeaders.includes('name') || familyNameInConditional,\n );\n\n if (isFamilyNameMapped) {\n const conflictingFieldsByFedId = getConflictingFieldForFederatedId(data, itemFamilyFederatedId, itemfamilyName);\n if (conflictingFieldsByFedId.length) {\n let prettyString = '';\n for (const fedIdConflict of conflictingFieldsByFedId) {\n prettyString += `(${fedIdConflict.federatedId}: (${fedIdConflict.values.join(', ')}))`;\n }\n\n generalErrors.push({\n message: ITEM_PROCESSOR_ERRORS.CONFLICTING_IDS(prettyString),\n issueType: IssueType.CONFIG,\n });\n }\n\n // check for duplicate itemOptionFederatedIds\n const optionFederatedIdInConditional = config?.conditionalColumns?.some(\n (column) => column.toProperty === 'itemOptionFederatedId',\n );\n const itemOptionFederatedId = config?.federatedMappings?.itemOptionFederatedId || 'itemOptionFederatedId';\n if (\n config?.federatedMappings?.itemOptionFederatedId ||\n csvHeaders.includes('itemOptionFederatedId') ||\n optionFederatedIdInConditional\n ) {\n const duplicateOptionFedIds = getDuplicateFederatedIds(data, itemOptionFederatedId);\n if (duplicateOptionFedIds.length) {\n errors.push(...duplicateOptionFedIds);\n }\n }\n }\n }\n}\n","import { Type } from '@contrail/types';\nimport { intersection, difference, chunk } from 'lodash';\nimport { EntitiesClient } from '@contrail/entity-types';\nimport { TypesByPath } from './entities-helper';\n\nexport async function getSizeRangeTemplates(client: EntitiesClient, ids: string[]) {\n const sizeRangeTemplates = [];\n for (const batch of chunk([...new Set(ids)], 10)) {\n const sizeRangeTemplatesBatch = await client.get({\n entityName: 'size-range-template',\n criteria: { ids: batch },\n });\n sizeRangeTemplates.push(...sizeRangeTemplatesBatch);\n }\n return sizeRangeTemplates;\n}\n\ninterface TwoDimensionalSizeRange {\n sizes: { [key: string]: Array<string> };\n}\ninterface OneDimensionalSizeRange {\n sizes: Array<string>;\n}\ntype SizeRange = OneDimensionalSizeRange | TwoDimensionalSizeRange;\nexport interface SizeRangeTemplate {\n sizeRange: SizeRange;\n}\nexport class SizeRangeError {\n sizeRangeTemplate: SizeRangeTemplate;\n passedSizeRangeSizes: Array<string>;\n sizeRangeDimension?: string;\n errorMessage: string;\n constructor(options: {\n sizeRangeTemplate: SizeRangeTemplate;\n passedSizeRangeSizes: Array<string>;\n errorMessage: string;\n sizeRangeDimension;\n }) {\n this.sizeRangeTemplate = options.sizeRangeTemplate;\n this.passedSizeRangeSizes = options.passedSizeRangeSizes;\n this.sizeRangeDimension = options.sizeRangeDimension;\n this.errorMessage = options.errorMessage;\n }\n}\n\nexport const SIZE_RANGE_SLUG = 'sizeRange';\nexport const SIZE_RANGE_TEMPLATE_SLUG = 'sizeRangeTemplate';\nexport const SIZE_RANGE_TEMPLATE_SLUG_ID = 'sizeRangeTemplateId';\n\nexport class SizeRangeSanitizer {\n private warnings: SizeRangeError[] = [];\n constructor() {\n this.warnings = [];\n }\n\n public getWarnings() {\n return this.warnings;\n }\n\n public getWarningsAsStringList() {\n return this.warnings.map((x) => JSON.stringify(x));\n }\n\n /**\n * Sets the size range objects based on the size range templates.\n *\n * Some size ranges may have bad values, so we clean up these values and ensure that only correct\n * size ranges (those that are allowed in the size range template) are set.\n *\n * Additionally, it sets an empty array for size ranges that are not set.\n */\n async sanitizeSizeRanges(client: EntitiesClient, typesByPath: TypesByPath, incomingEntities: any[]) {\n try {\n // TODO: remove size ranges from existing entity bad values.\n // This means that if an item that is going to be updated with a load contains\n // bad size ranges, we should remove them from the existing entity.\n // TODO: pass these warnings to the user in the UI\n\n const validTypePaths = [];\n const typePaths = Array.from(new Set(incomingEntities.map((x) => x.typePath)));\n for (const typePath of typePaths) {\n const type: Type = typesByPath[typePath]?.type;\n if (!type) {\n console.debug(`No type found for ${typePath}, skipping.`);\n continue;\n }\n\n const typePropertySlugs = type?.typeProperties?.map((x) => x.slug);\n // if this type does not have the required size range properties, skip\n if (intersection(typePropertySlugs, [SIZE_RANGE_SLUG, SIZE_RANGE_TEMPLATE_SLUG]).length !== 2) {\n console.debug(`No size ranges for type ${JSON.stringify(type, null, 2)}, skipping.`);\n continue;\n }\n\n validTypePaths.push(typePath);\n }\n\n const validEntities = incomingEntities.filter((x) => validTypePaths.includes(x.typePath));\n\n // assumes that the load file will reference the size range template by its id\n // sub-assumption that the size range template was converted from the user input to the\n // id field.\n const sizeRangeTemplateIds = validEntities.map((x) => x[SIZE_RANGE_TEMPLATE_SLUG_ID]).filter((x) => !!x);\n const sizeRangeTemplates = await getSizeRangeTemplates(client, sizeRangeTemplateIds);\n for (const entity of validEntities) {\n this.cleanSizeRangeInEntity(entity, sizeRangeTemplates);\n }\n return this.warnings;\n } catch (error) {\n console.error('Error sanitizing size ranges', error);\n return this.warnings;\n }\n }\n\n cleanSizeRangeInEntity(entity: any, sizeRangeTemplates: any[]): SizeRangeError[] {\n if (!entity[SIZE_RANGE_TEMPLATE_SLUG_ID]) {\n return;\n }\n // assumes that the load file will reference the size range template by its federated Id\n const sizeRangeTemplate = sizeRangeTemplates.find((x) => x.id === entity[SIZE_RANGE_TEMPLATE_SLUG_ID]);\n if (!sizeRangeTemplate) {\n this.recordSizeRangeError(\n `No size range template found for ${entity[SIZE_RANGE_TEMPLATE_SLUG_ID]}`,\n null,\n null,\n null,\n );\n return;\n }\n if (!sizeRangeTemplate?.sizeRange?.sizes) {\n this.recordSizeRangeError('Encountered a size range template with a bad format.', sizeRangeTemplate, null, null);\n return;\n }\n const isOneDimensionalSizeRange = Array.isArray(sizeRangeTemplate.sizeRange.sizes);\n const isTwoDimensionalSizeRange = Object.keys(sizeRangeTemplate.sizeRange.sizes).length > 0;\n if (isOneDimensionalSizeRange) {\n this.validateOneDimensionalSizeRanges(sizeRangeTemplate, entity);\n } else if (isTwoDimensionalSizeRange) {\n this.validateTwoDimensionalSizeRanges(sizeRangeTemplate, entity);\n } // handle unknown dimension sizes\n else {\n this.recordSizeRangeError('Encountered an Unknown size range template format', sizeRangeTemplate, null, null);\n }\n }\n\n validateOneDimensionalSizeRanges(sizeRangeTemplate: any, entity: any) {\n if (!entity[SIZE_RANGE_SLUG]) {\n return;\n }\n const allowedSizes: string[] = sizeRangeTemplate?.sizeRange?.sizes ?? [];\n const incomingSizes: string[] = entity[SIZE_RANGE_SLUG]?.sizes ?? [];\n const appliedSizes = intersection(allowedSizes, incomingSizes);\n const invalidSizes = difference(incomingSizes, allowedSizes);\n // start with an empty size range array for 1 dimensional size ranges. This effectively resets the size range.\n if (invalidSizes.length > 0) {\n this.recordSizeRangeError('Invalid sizes found for size range template', sizeRangeTemplate, invalidSizes, null);\n }\n\n const validSizes: OneDimensionalSizeRange = { sizes: appliedSizes };\n entity[SIZE_RANGE_SLUG] = validSizes;\n }\n\n validateTwoDimensionalSizeRanges(sizeRangeTemplate: any, entity: any) {\n if (!entity[SIZE_RANGE_SLUG]) {\n return;\n }\n\n const allowedSizes: TwoDimensionalSizeRange = { sizes: {} };\n for (const [dimensionName, sizes] of Object.entries(sizeRangeTemplate.sizeRange.sizes)) {\n if (!Array.isArray(sizes)) {\n this.recordSizeRangeError('Invalid size range format for template', sizeRangeTemplate, null, null);\n continue;\n }\n allowedSizes.sizes[dimensionName] = [...sizes];\n }\n const incomingSizes: TwoDimensionalSizeRange = entity[SIZE_RANGE_SLUG];\n const invalidSizes: TwoDimensionalSizeRange = { sizes: {} };\n const appliedSizes: TwoDimensionalSizeRange = { sizes: {} };\n // start with adding an empty value for all the allowed size ranges\n // this effectively reset the size range sizes and overrides existing data\n // for those ranges if any exist.\n for (const dimensionName of Object.keys(allowedSizes.sizes)) {\n appliedSizes.sizes[dimensionName] = [];\n }\n\n // compute union\n for (const [dimensionName, dimensionSizes] of Object.entries(incomingSizes.sizes)) {\n if (!Array.isArray(dimensionSizes)) {\n this.recordSizeRangeError(\n 'Dimension is not in the correct format. Must be an array of strings.',\n sizeRangeTemplate,\n dimensionSizes,\n dimensionName,\n );\n continue;\n }\n\n if (!allowedSizes.sizes[dimensionName]) {\n invalidSizes.sizes[dimensionName] = [...dimensionSizes];\n continue;\n }\n appliedSizes.sizes[dimensionName] = intersection(allowedSizes.sizes[dimensionName], dimensionSizes);\n invalidSizes.sizes[dimensionName] = difference(dimensionSizes, allowedSizes.sizes[dimensionName]);\n }\n for (const [dimensionName, value] of Object.entries(invalidSizes.sizes)) {\n if (value.length > 0) {\n this.recordSizeRangeError('Invalid size.', sizeRangeTemplate, value, dimensionName);\n }\n }\n\n if (Object.keys(appliedSizes.sizes)?.length) {\n entity[SIZE_RANGE_SLUG] = appliedSizes;\n }\n }\n\n recordSizeRangeError(\n errorMessage: string,\n sizeRangeTemplate: SizeRangeTemplate = null,\n passedSizeRangeSizes: Array<string> = null,\n sizeRangeDimension: string = null,\n ) {\n console.warn(errorMessage);\n this.warnings.push(\n new SizeRangeError({\n sizeRangeTemplate,\n passedSizeRangeSizes,\n sizeRangeDimension,\n errorMessage,\n }),\n );\n }\n}\n","import { assignObjectReferences, EntitiesLambdaCallType, retryOnTimeout, TypesByPath } from '../common/entities-helper';\nimport { addProperty } from '../common/entity-builder-helpers';\nimport { getProcessorForEntityType } from '../processor-registry';\nimport { chunk } from 'lodash';\nimport {\n EntitiesClient,\n EntityType,\n GeneralIssueDetails,\n IssueType,\n LoaderProcess,\n ProcessingIssues,\n} from '@contrail/entity-types';\nimport { buildTypesByPath } from '../common/type-helper';\nimport { BaseProcessorV2 } from './base-processor-v2';\nimport { ENTITY_PROCESSOR_ERRORS } from '../constants';\nimport { removeOptionOrFamilySuffix } from '../common/data-transformer-functions';\nimport { Type } from '@contrail/types';\n\nconst pLimit = require('p-limit');\nconst limit = pLimit(5);\n\nexport interface ProcessedEntityV2 {\n incomingEntities: string[];\n badEntities: string[];\n allCurrentEntitiesByFederatedId: Record<string, any>;\n typesByPath: string[];\n projectId: string;\n generalWarnings?: GeneralIssueDetails[];\n}\n\nexport interface UniqueAndDuplicateEntriesV2 {\n uniqueFedIds: string[];\n nonUniqueFedIds: string[];\n}\n\nexport class EntityProcessorV2 {\n static async setupEntities(\n client: EntitiesClient,\n entityType: EntityType,\n rawData: any[],\n entitySpecificProperties?: any,\n loaderProcess?: LoaderProcess,\n itemsByFederatedId: Record<string, any> = {},\n doConstructEntities: boolean = true,\n typesByTypePath?: Record<string, Type>,\n ): Promise<ProcessedEntityV2 | any> {\n try {\n const processor = getProcessorForEntityType(entityType, 'v2');\n\n rawData = processor.transformData(rawData);\n\n const requiredProperties = processor.requiredProperties || [];\n const result = doConstructEntities\n ? await this.constructEntities({\n client,\n processor,\n entityType,\n requiredProperties,\n data: rawData,\n entitySpecificProperties,\n itemsByFederatedId,\n typesByTypePath,\n })\n : // this for load type assortment, we have different operation for assortment, hence have to call new function for assortment\n await processor.buildAssortmentEntities(client, rawData, loaderProcess, itemsByFederatedId, typesByTypePath);\n\n return result;\n } catch (error) {\n console.error(`Error processing and loading objects for ${entityType}:`, error);\n return {\n incomingEntities: rawData,\n badEntities: [],\n allCurrentEntitiesByFederatedId: {},\n typesByPath: [],\n projectId: null,\n };\n }\n }\n\n private static async constructEntities(params: {\n client: EntitiesClient;\n processor: typeof BaseProcessorV2;\n entityType: EntityType;\n requiredProperties?: string[];\n data: any[];\n entitySpecificProperties?: any;\n itemsByFederatedId?: Record<string, any>;\n typesByTypePath?: Record<string, any>;\n }): Promise<ProcessedEntityV2 | any> {\n const {\n client,\n processor,\n entityType,\n requiredProperties = [],\n data = [],\n entitySpecificProperties,\n itemsByFederatedId = {},\n typesByTypePath,\n } = params;\n\n if (!data?.length) {\n console.debug('No data to upload');\n return {\n incomingEntities: [],\n badEntities: [],\n allCurrentEntitiesByFederatedId: {},\n typesByPath: [],\n projectId: null,\n };\n }\n\n const typePaths = this.getTypePaths(data, entityType, processor);\n\n const typesByPath: TypesByPath = await this.fetchTypesByPath({\n client,\n typePaths,\n requiredProperties,\n entityType,\n typesByTypePath,\n });\n\n const error = [];\n for (const typePath in typesByPath) {\n if (typesByPath[typePath]?.error) {\n error.push(typesByPath[typePath].error);\n }\n }\n\n if (error.length) {\n return {\n incomingEntities: [],\n badEntities: [],\n allCurrentEntitiesByFederatedId: {},\n typesByPath: [],\n projectId: null,\n error,\n };\n }\n\n // This is the only place where we are using the entitySpecificProperties\n const { projectId } = await processor.processEntitiesProperties(client, entitySpecificProperties, data);\n\n const { badEntities, incomingEntities } = this.buildIncomingEntities(processor, data, typesByPath, entityType);\n\n if (incomingEntities.length === 0)\n return {\n incomingEntities,\n badEntities,\n allCurrentEntitiesByFederatedId: {},\n typesByPath: [],\n projectId,\n };\n\n const generalWarnings = await assignObjectReferences(client, typePaths, typesByPath, incomingEntities);\n\n const result = await processor.assignExtraItems(client, typePaths, typesByPath, incomingEntities, projectId);\n\n result.projectId = projectId;\n\n const federatedIdKeys = processor.getFederatedIdKeys();\n let federatedIds;\n\n if (processor.canExtractFederatedIds(itemsByFederatedId, incomingEntities)) {\n federatedIds = this.extractFederatedIds(incomingEntities, processor, federatedIdKeys);\n\n console.debug(`Looking up ${federatedIds?.length} federated IDs to check for existing ${entityType} entities`);\n }\n\n const entityTypeForFederatedId = processor.getEntityTypeForFederatedId(entityType);\n const allCurrentEntitiesByFederatedId = await this.fetchCurrentEntities(\n client,\n entityTypeForFederatedId,\n federatedIds,\n );\n\n processor.logIncommingEntities(incomingEntities, entityType, result);\n\n return {\n incomingEntities,\n badEntities,\n allCurrentEntitiesByFederatedId,\n typesByPath,\n ...result,\n generalWarnings,\n };\n }\n\n private static getTypePaths(data: any[], entityType: string, processor): string[] {\n return Array.from(new Set(data.map((row) => processor.getTypePath(row, entityType))));\n }\n\n private static async fetchTypesByPath(params: {\n client: EntitiesClient;\n typePaths: string[];\n requiredProperties: string[];\n entityType: string;\n typesByTypePath?: Record<string, any>;\n }): Promise<TypesByPath> {\n const { client, typePaths, requiredProperties, entityType, typesByTypePath } = params;\n return await buildTypesByPath(client, typePaths, requiredProperties, entityType, typesByTypePath);\n }\n\n private static buildIncomingEntities(\n processor: typeof BaseProcessorV2,\n data: any[],\n typesByPath: TypesByPath,\n entityType: string,\n ): { badEntities: any[]; incomingEntities: any[] } {\n const incomingEntities = [];\n const badEntities = [];\n\n for (const row of data) {\n if (!processor.validateRow(row)) {\n badEntities.push(row);\n console.error(`Invalid data found for this row ${entityType}:`, row);\n continue;\n }\n\n const typePath = processor.getTypePath(row, entityType);\n const type = typesByPath[typePath];\n const entity: any = {};\n\n for (const propertyName in row) {\n // need to check this condition, it's not present for items\n if (processor.canAddProperty(type.allPropertiesSlugs, propertyName)) {\n const basePropertyName = removeOptionOrFamilySuffix(propertyName);\n addProperty(\n propertyName,\n type.allPropertiesSlugs,\n type.typePropertyToValueType[basePropertyName],\n entity,\n row[propertyName],\n );\n }\n }\n\n processor.setExtraProperties(entity, type, row);\n\n incomingEntities.push(entity);\n }\n\n return { badEntities, incomingEntities };\n }\n\n public static extractFederatedIds(\n incomingEntities: any[],\n processor: typeof BaseProcessorV2,\n federatedIdkeys: string[],\n ): string[] {\n const allFederatedIds = [];\n const re = /\\//gi;\n\n for (const incomingEntity of incomingEntities) {\n for (const federatedIdkey of federatedIdkeys) {\n if (!incomingEntity.hasOwnProperty(federatedIdkey)) continue;\n\n const processedFederatedId = processor.processFederatedId(\n incomingEntity[federatedIdkey],\n incomingEntity.typePath,\n );\n const federatedId = processedFederatedId.replace(re, '%2F');\n allFederatedIds.push(federatedId);\n\n incomingEntity[federatedIdkey] = processedFederatedId;\n }\n }\n\n const { uniqueFedIds } = this.getUniqueAndDuplicateEntries(allFederatedIds);\n\n return uniqueFedIds;\n }\n\n private static async fetchCurrentEntities(\n client: EntitiesClient,\n entityType: string,\n federatedIds: string[],\n ): Promise<Record<string, any>> {\n const chunks: string[][] = chunk(federatedIds, 200);\n const allCurrentEntitiesByFederatedId: Record<string, any> = {};\n const federatedPromises = [];\n\n for (const chunk of chunks) {\n if (!chunk?.length) continue;\n\n federatedPromises.push(\n limit(async () => {\n try {\n const currentEntityBatch = await retryOnTimeout(client, EntitiesLambdaCallType.GET, {\n entityName: entityType,\n federatedIds: chunk,\n skipHydrateRelationships: true,\n });\n\n if (!currentEntityBatch) {\n console.warn(`No existing ${entityType} entities found for the provided federated IDs`);\n }\n if (currentEntityBatch?.length) {\n for (const currentEntity of currentEntityBatch) {\n allCurrentEntitiesByFederatedId[currentEntity.federatedId] = currentEntity;\n }\n }\n } catch (e) {\n console.error(`Failed to fetch ${entityType} by federatedIds:`, e);\n throw e;\n }\n }),\n );\n }\n\n await Promise.all(federatedPromises);\n console.info(\n `Existing ${entityType} lookup complete: ${Object.keys(allCurrentEntitiesByFederatedId)?.length} found by federatedId`,\n );\n\n return allCurrentEntitiesByFederatedId;\n }\n\n private static getUniqueAndDuplicateEntries(strings: string[]): UniqueAndDuplicateEntriesV2 {\n const uniqueFedIds = new Set<string>();\n const nonUniqueFedIds = new Set<string>();\n\n for (const string of strings) {\n if (uniqueFedIds.has(string)) {\n nonUniqueFedIds.add(string);\n } else {\n uniqueFedIds.add(string);\n }\n }\n\n console.debug(`Unique federatedId count: ${uniqueFedIds.size}`);\n console.debug(`Non-Unique federatedId count: ${nonUniqueFedIds.size}`);\n console.debug(`Non-Unique federatedIds: ${Array.from(uniqueFedIds)}`);\n\n return {\n uniqueFedIds: Array.from(uniqueFedIds),\n nonUniqueFedIds: Array.from(nonUniqueFedIds),\n };\n }\n\n public static validateLoadFile(\n data: any[],\n config: LoaderProcess,\n federatedIdKey: string = 'federatedId',\n nameKey: string = 'name',\n returnImmediately = false,\n ) {\n const csvHeaders = Object.keys(data[0]);\n const errors: ProcessingIssues[] = [];\n const warnings: ProcessingIssues[] = [];\n const generalErrors: GeneralIssueDetails[] = [];\n const generalWarnings: GeneralIssueDetails[] = [];\n\n if (!config) {\n generalErrors.push({\n message: ENTITY_PROCESSOR_ERRORS.CONFIG_EMPTY,\n issueType: IssueType.CONFIG,\n });\n returnImmediately = true;\n return {\n errors,\n warnings,\n generalErrors,\n generalWarnings,\n csvHeaders,\n returnImmediately,\n };\n }\n\n if (!config?.loadType?.length) {\n generalErrors.push({\n message: ENTITY_PROCESSOR_ERRORS.LOAD_TYPE_REQUIRED,\n issueType: IssueType.CONFIG,\n });\n }\n\n this.validateFederatedIdMapping(config, csvHeaders, federatedIdKey, generalErrors);\n\n this.validateNameMapping(config, csvHeaders, nameKey, generalErrors);\n\n returnImmediately = this.validateSkipStaleUpdatesUsing(config, csvHeaders, generalErrors) || returnImmediately;\n\n return {\n errors,\n warnings,\n generalErrors,\n generalWarnings,\n csvHeaders,\n returnImmediately,\n };\n }\n\n private static validateFederatedIdMapping(\n config,\n csvHeaders,\n federatedIdKey: string,\n generalErrors: GeneralIssueDetails[],\n ) {\n // Check federatedId in csvHeaders, federatedMapping, or conditionalColumns\n const federatedIdInConditional = config?.conditionalColumns?.some((column) => column.toProperty === federatedIdKey);\n const federatedIdInFederatedMapping = config?.federatedMappings?.[federatedIdKey];\n const federatedIdInCSV = csvHeaders.includes(federatedIdKey);\n\n if (!federatedIdInFederatedMapping && !federatedIdInCSV && !federatedIdInConditional) {\n generalErrors.push({\n message: ENTITY_PROCESSOR_ERRORS.FEDERATED_ID_REQUIRED,\n issueType: IssueType.CONFIG,\n });\n } else if (federatedIdInFederatedMapping && !csvHeaders.includes(config.federatedMappings[federatedIdKey])) {\n generalErrors.push({\n message: ENTITY_PROCESSOR_ERRORS.FEDERATED_ID_REQUIRED,\n issueType: IssueType.CONFIG,\n });\n }\n }\n\n private static validateNameMapping(config, csvHeaders, nameKey: string, generalErrors: GeneralIssueDetails[]) {\n // Check name in csvHeaders, federatedMapping, or conditionalColumns\n const nameInConditional = config?.conditionalColumns?.some((column) => column.toProperty === nameKey);\n const nameInFederatedMapping = config?.federatedMappings?.[nameKey];\n const nameInCSV = csvHeaders.includes(nameKey);\n\n if (!nameInFederatedMapping && !nameInCSV && !nameInConditional) {\n generalErrors.push({\n message: ENTITY_PROCESSOR_ERRORS.NAME_REQUIRED,\n issueType: IssueType.CONFIG,\n });\n } else if (nameInFederatedMapping && !csvHeaders.includes(config.federatedMappings[nameKey])) {\n generalErrors.push({\n message: ENTITY_PROCESSOR_ERRORS.NAME_REQUIRED,\n issueType: IssueType.CONFIG,\n });\n }\n }\n\n /**\n * Validates the skipStaleUpdatesUsing configuration.\n * This validation runs during the preprocessing phase, before any entity processing begins.\n * If the configured column doesn't exist, the load will fail early with a clear error message.\n *\n * @param config - The loader configuration\n * @param csvHeaders - The CSV column headers\n * @param generalErrors - Array to collect validation errors\n * @returns Updated returnImmediately flag (set to true if errors found)\n */\n private static validateSkipStaleUpdatesUsing(\n config,\n csvHeaders: string[],\n generalErrors: GeneralIssueDetails[],\n ): boolean {\n if (!config?.skipStaleUpdatesUsing) {\n return false; // Feature is optional\n }\n\n // Validate that skipStaleUpdatesUsing is a string\n if (typeof config.skipStaleUpdatesUsing !== 'string') {\n generalErrors.push({\n message: `skipStaleUpdatesUsing must be a string column name, received: ${typeof config.skipStaleUpdatesUsing}`,\n issueType: IssueType.CONFIG,\n });\n return true; // Critical configuration error\n }\n\n // Check if the column exists in CSV headers, federated mappings, or conditional columns\n const columnName = config.skipStaleUpdatesUsing;\n const inCSV = csvHeaders.includes(columnName);\n const inFederatedMapping = config?.federatedMappings?.[columnName];\n const inConditional = config?.conditionalColumns?.some((column) => column.toProperty === columnName);\n\n if (!inCSV && !inFederatedMapping && !inConditional) {\n generalErrors.push({\n message: `skipStaleUpdatesUsing column '${columnName}' not found in CSV headers, federated mappings, or conditional columns`,\n issueType: IssueType.CONFIG,\n });\n return true; // Critical configuration error\n } else if (inFederatedMapping && !csvHeaders.includes(config.federatedMappings[columnName])) {\n generalErrors.push({\n message: `skipStaleUpdatesUsing column '${columnName}' is mapped to '${config.federatedMappings[columnName]}' but that column is not in the CSV`,\n issueType: IssueType.CONFIG,\n });\n return true; // Critical configuration error\n }\n\n return false;\n }\n}\n","import { EntitiesClient, EntityType } from '@contrail/entity-types';\nimport { assignUserLists, EntitiesLambdaCallType, retryOnTimeout } from '../../common/entities-helper';\nimport { SizeRangeSanitizer } from '../../common/size-range-helpers';\nimport { BaseProcessorV2 } from '../base-processor-v2';\n\nexport class ProjectItemProcessor extends BaseProcessorV2 {\n static requiredProperties: string[] = ['itemOptionFederatedId', 'itemFamilyFederatedId'];\n\n static validateRow(row: { itemFamilyFederatedId: string }): boolean {\n return !!row.itemFamilyFederatedId;\n }\n\n public static getFederatedIdKeys() {\n return ['itemFamilyFederatedId', 'itemOptionFederatedId'];\n }\n\n public static getTypePath(row, entityType) {\n return 'project-item';\n }\n\n /**\n * Resolve projectId per-row from column data.\n *\n * Each row must have either a `workspaceIdentifier` or `projectId` column\n * (injected during preprocessing from config or provided directly in the CSV).\n * The resolved projectId is set directly on each data row and the\n * `workspaceIdentifier` column is cleaned up.\n *\n * Returns `{ projectId: null }` since projectId is now per-row, not global.\n * The per-row projectId is read later from entities during execution.\n */\n public static async processEntitiesProperties(\n client: EntitiesClient,\n entitySpecificProps: any,\n data: any[],\n ): Promise<{ projectId: string | null }> {\n if (!data?.length) return { projectId: null };\n\n const hasWorkspaceIdentifier = data.some((row) => row.workspaceIdentifier);\n const hasProjectId = data.some((row) => row.projectId);\n\n if (hasWorkspaceIdentifier && hasProjectId) {\n console.error('Rows contain both workspaceIdentifier and projectId columns. Use one or the other, not both.');\n return { projectId: null };\n }\n\n if (hasProjectId) {\n // projectId is provided directly — no resolution needed.\n // Return the first non-empty projectId for backwards compat with\n // code that reads a single projectId from the result.\n const firstProjectId = data.find((row) => row.projectId)?.projectId || null;\n return { projectId: firstProjectId };\n }\n\n if (hasWorkspaceIdentifier) {\n // Resolve unique workspace identifiers to project IDs (with caching)\n const cache: Record<string, string | null> = {};\n for (const row of data) {\n const wsId = row.workspaceIdentifier;\n if (!wsId) continue;\n\n if (!(wsId in cache)) {\n cache[wsId] = await this.getProjectIdFromWorkspace(client, wsId);\n }\n\n row.projectId = cache[wsId];\n delete row.workspaceIdentifier;\n }\n\n // Return the first resolved projectId for backwards compat\n const firstProjectId = Object.values(cache).find((id) => id != null) || null;\n return { projectId: firstProjectId };\n }\n\n console.debug('No workspaceIdentifier or projectId column found on project-item rows.');\n return { projectId: null };\n }\n\n private static async getProjectIdFromWorkspace(\n client: EntitiesClient,\n workspaceIdentifier: string,\n ): Promise<string | null> {\n const workspaces = await retryOnTimeout(client, EntitiesLambdaCallType.GET, {\n entityName: 'workspace',\n criteria: {\n identifier: workspaceIdentifier,\n workspaceType: 'PROJECT',\n },\n skipHydrateRelationships: true,\n });\n\n if (!workspaces?.length) {\n return null;\n }\n\n const workspaceId = workspaces[0]?.id;\n if (!workspaceId) {\n return null;\n }\n\n const workspace = await retryOnTimeout(client, EntitiesLambdaCallType.GET, {\n entityName: 'workspace',\n id: workspaceId,\n relations: ['project'],\n skipHydrateRelationships: true,\n });\n\n return workspace?.project?.id || null;\n }\n\n static setExtraProperties(entity: any, type: any, row?: any): void {\n entity.typeId = type.type.id;\n entity.typePath = type.type.typePath;\n // Copy per-row projectId from the source row onto the built entity\n if (row?.projectId) {\n entity.projectId = row.projectId;\n }\n }\n\n static async assignExtraItems(client, typePaths, typesByPath, incomingProjectItems, projectId: String) {\n await assignUserLists(client, ['project-item'], typesByPath, incomingProjectItems);\n\n // clean up size ranges\n const sizeRangeSanitizer = new SizeRangeSanitizer();\n await sizeRangeSanitizer.sanitizeSizeRanges(client, typesByPath, incomingProjectItems);\n\n const sizeRangeWarningsAsStringList = sizeRangeSanitizer.getWarningsAsStringList();\n\n // For backwards compat: if a single projectId was passed (legacy path),\n // set it on entities that don't already have one from per-row resolution.\n if (projectId) {\n for (const incomingProjectItem of incomingProjectItems) {\n if (!incomingProjectItem.projectId) {\n incomingProjectItem.projectId = projectId;\n }\n }\n }\n\n return {\n sizeRangeWarningsAsStringList,\n };\n }\n\n public static canExtractFederatedIds(itemsByFederatedId: any, incomingEntities: any[]) {\n return !(Object.keys(itemsByFederatedId)?.length > 0) && incomingEntities.length > 0;\n }\n\n public static getEntityTypeForFederatedId(entityType: EntityType): EntityType {\n return EntityType.ITEM;\n }\n}\n","import { GeneralIssueDetails, IssueType, LoaderProcess, LoadType, ProcessingIssues } from '@contrail/entity-types';\nimport { BaseProcessorV2 } from '../base-processor-v2';\nimport { EntityProcessorV2 } from '../entity-processor-v2';\nimport { getDuplicateFederatedIds } from '../../common/util';\nimport { CUSTOM_ENTITY_PROCESSOR_ERRORS, ENTITY_PROCESSOR_ERRORS } from '../../constants';\n\ninterface CustomEntityData {\n [key: string]: any;\n}\n\nexport class CustomEntityProcessorV2 extends BaseProcessorV2 {\n static requiredProperties = ['typePath', 'typeId', 'federatedId', 'name'];\n\n static processFederatedId(federatedId: string, typePath: string): string {\n if (!federatedId.startsWith('custom-entity:')) {\n federatedId = typePath + ':' + federatedId;\n }\n return federatedId;\n }\n\n public static canAddProperty(allPropertiesSlugs: string[], propertyName: string): boolean {\n return allPropertiesSlugs.includes(propertyName);\n }\n\n static setExtraProperties(entity: any, type: any): void {\n entity.typeId = type.type.id;\n }\n\n private static isValidCustomEntityTypePath(typePath?: string): boolean {\n return !!typePath?.startsWith('custom-entity:') && !!typePath?.split(':')[1]?.length;\n }\n\n private static validateTypePath(\n data: CustomEntityData[],\n config: LoaderProcess,\n csvHeaders: string[],\n generalErrors: GeneralIssueDetails[],\n ): void {\n const typePathSource = {\n conditional: config?.conditionalColumns?.some(\n (column) => column.toProperty === 'typePath' && this.isValidCustomEntityTypePath(column.default),\n ),\n federated: config?.federatedMappings?.typePath,\n csv: csvHeaders?.includes('typePath'),\n };\n\n if (typePathSource.csv) {\n const hasCorrectTypePath = data.every((row) => this.isValidCustomEntityTypePath(row.typePath));\n if (!hasCorrectTypePath) {\n generalErrors.push({\n message: CUSTOM_ENTITY_PROCESSOR_ERRORS.TYPEPATH_MISSING,\n issueType: IssueType.CONFIG,\n });\n }\n return;\n }\n\n if (!typePathSource.conditional && !typePathSource.federated) {\n generalErrors.push({\n message: CUSTOM_ENTITY_PROCESSOR_ERRORS.TYPEPATH_MISSING,\n issueType: IssueType.CONFIG,\n });\n return;\n }\n\n if (typePathSource.federated && !csvHeaders.includes(typePathSource.federated)) {\n generalErrors.push({\n message: CUSTOM_ENTITY_PROCESSOR_ERRORS.TYPEPATH_MISSING,\n issueType: IssueType.CONFIG,\n });\n }\n }\n\n static validateLoadFile(\n data: CustomEntityData[],\n config: LoaderProcess,\n ): {\n errors: ProcessingIssues[];\n warnings: ProcessingIssues[];\n generalErrors: GeneralIssueDetails[];\n generalWarnings: GeneralIssueDetails[];\n } {\n const { errors, warnings, generalErrors, generalWarnings, csvHeaders, returnImmediately } =\n EntityProcessorV2.validateLoadFile(data, config);\n\n if (returnImmediately) {\n return { errors, warnings, generalErrors, generalWarnings };\n }\n\n if (config?.loadType?.length && config?.loadType[0] !== LoadType.CUSTOM_ENTITY) {\n generalErrors.push({\n message: ENTITY_PROCESSOR_ERRORS.SINGLE_LOAD_TYPE(LoadType.CUSTOM_ENTITY),\n issueType: IssueType.CONFIG,\n });\n }\n\n this.validateTypePath(data, config, csvHeaders, generalErrors);\n\n const duplicateFederatedIdErrors = getDuplicateFederatedIds(\n data,\n config?.federatedMappings?.federatedId || 'federatedId',\n );\n if (duplicateFederatedIdErrors.length) {\n errors.push(...duplicateFederatedIdErrors);\n }\n\n return { errors, warnings, generalErrors, generalWarnings };\n }\n}\n","import { GeneralIssueDetails, IssueType, LoaderProcess, LoadType, ProcessingIssues } from '@contrail/entity-types';\nimport { getDuplicateFederatedIds } from '../../common/util';\nimport { EntityProcessorV2 } from '../entity-processor-v2';\nimport { COLOR_PROCESSOR_ERRORS, COLOR_PROCESSOR_WARNINGS, ENTITY_PROCESSOR_ERRORS } from '../../constants';\nimport { BaseProcessorV2 } from '../base-processor-v2';\n\ninterface ColorData {\n hex?: string;\n [key: string]: any;\n}\n\nfunction removeHexHash(data: ColorData[]): ColorData[] {\n for (const row of data ?? []) {\n if (row.hex?.startsWith('#')) {\n row.hex = row.hex.slice(1);\n }\n }\n return data;\n}\n\nexport class ColorProcessorV2 extends BaseProcessorV2 {\n static requiredProperties: string[] = ['typePath', 'typeId', 'federatedId', 'name', 'hex', 'red', 'green', 'blue'];\n\n public static canAddProperty(allPropertiesSlugs: string[], propertyName: string): boolean {\n return allPropertiesSlugs.includes(propertyName);\n }\n\n static transformData(data: ColorData[]): ColorData[] {\n if (!data) {\n return [];\n }\n\n return removeHexHash(data);\n }\n\n static validateLoadFile(\n data: ColorData[],\n config: LoaderProcess,\n ): {\n errors: ProcessingIssues[];\n warnings: ProcessingIssues[];\n generalErrors: GeneralIssueDetails[];\n generalWarnings: GeneralIssueDetails[];\n } {\n const { errors, warnings, generalErrors, generalWarnings, csvHeaders, returnImmediately } =\n EntityProcessorV2.validateLoadFile(data, config);\n\n if (returnImmediately) {\n return { errors, warnings, generalErrors, generalWarnings };\n }\n\n if (config?.loadType?.length && config?.loadType[0] !== LoadType.COLOR) {\n generalErrors.push({\n message: ENTITY_PROCESSOR_ERRORS.SINGLE_LOAD_TYPE(LoadType.COLOR),\n issueType: IssueType.CONFIG,\n });\n }\n\n this.validateTypePath(data, config, csvHeaders, generalErrors);\n\n const duplicateFederatedIdErrors = getDuplicateFederatedIds(\n data,\n config?.federatedMappings?.federatedId || 'federatedId',\n );\n if (duplicateFederatedIdErrors.length) {\n errors.push(...duplicateFederatedIdErrors);\n }\n\n const redColumn = config?.federatedMappings?.red || 'red';\n const blueColumn = config?.federatedMappings?.blue || 'blue';\n const greenColumn = config?.federatedMappings?.green || 'green';\n const hexColumn = config?.federatedMappings?.hex || 'hex';\n const hasRedColumn = csvHeaders.includes(redColumn);\n const hasBlueColumn = csvHeaders.includes(blueColumn);\n const hasGreenColumn = csvHeaders.includes(greenColumn);\n const hasHexColumn = csvHeaders.includes(hexColumn);\n if (hasHexColumn && hasRedColumn && hasGreenColumn && hasBlueColumn) {\n generalWarnings.push({\n message: COLOR_PROCESSOR_WARNINGS.HEX_IGNORED_WARNING,\n issueType: IssueType.CONFIG,\n });\n }\n\n return { errors, warnings, generalErrors, generalWarnings };\n }\n\n private static validateTypePath(\n data: ColorData[],\n config: LoaderProcess,\n csvHeaders: string[],\n generalErrors: GeneralIssueDetails[],\n ): void {\n const typePathSource = {\n conditional: config?.conditionalColumns?.some(\n (column) => column.toProperty === 'typePath' && column.default === 'color',\n ),\n federated: config?.federatedMappings?.typePath,\n csv: csvHeaders?.includes('typePath'),\n };\n\n // Check CSV data if present (keep existing)\n if (typePathSource.csv) {\n const hasCorrectTypePath = data.every((row) => row.typePath === 'color');\n if (!hasCorrectTypePath) {\n generalErrors.push({\n message: COLOR_PROCESSOR_ERRORS.TYPEPATH_MISSING,\n issueType: IssueType.CONFIG,\n });\n }\n return;\n }\n\n // Only validate conditional if it exists and has typePath\n if (config?.conditionalColumns?.some((col) => col.toProperty === 'typePath')) {\n if (!typePathSource.conditional) {\n generalErrors.push({\n message: COLOR_PROCESSOR_ERRORS.TYPEPATH_MISSING,\n issueType: IssueType.CONFIG,\n });\n }\n }\n\n // Check federated mapping if present (keep existing)\n if (typePathSource.federated && !csvHeaders.includes(typePathSource.federated)) {\n generalErrors.push({\n message: COLOR_PROCESSOR_ERRORS.TYPEPATH_MISSING,\n issueType: IssueType.CONFIG,\n });\n }\n }\n}\n","import {\n LoaderProcess,\n PreprocessingStepStoredResultSummary,\n EntitiesClient,\n GeneralIssueDetails,\n ProcessingIssues,\n IssueType,\n LoaderFailureArea,\n EntityType,\n ProcessedData,\n} from '@contrail/entity-types';\nimport { getCSVFromFile } from '../common/csv-file-helper';\nimport {\n applyConditionalColumns,\n applyFederatedMappings,\n convertToBoolean,\n getReducedTypes,\n removeUnwantedProperties,\n transformDataBasedOnTypes,\n transformDataBasedOnTypesWithoutWarnings,\n TypePropertyMaps,\n getPropertiesBySlugAndLabel,\n getOptionSetsUsingTypePropertiesBySlug,\n} from '../common/data-transformer-functions';\nimport { Type } from '@contrail/types';\nimport { uploadFileAsStream } from '../common/file-helper';\nimport { getProcessorForEntityTypes } from '../processor-registry';\n\nexport interface PreProcessingStepV2 {\n name: string;\n execute: PreprocessingFunctionV2;\n}\n\nexport interface StepResultOutputV2 {\n rows: any[];\n errors: ProcessingIssues[];\n warnings: ProcessingIssues[];\n generalErrors?: GeneralIssueDetails[];\n generalWarnings?: GeneralIssueDetails[];\n}\n\nexport interface PreprocessingFunctionV2 {\n (\n rows: any[],\n config?: {\n federatedMappings?: any;\n conditionalColumns?: any;\n propertiesToRemove?: string[];\n },\n typePropertyMaps?: TypePropertyMaps,\n addWarnings?: boolean,\n ): StepResultOutputV2;\n}\n\nexport class LoaderDataPreprocessorV2 {\n static getPreprocessingPipeline(): PreProcessingStepV2[] {\n return [\n { name: 'Convert CSV Boolean Values', execute: convertToBoolean },\n {\n name: 'Apply Federated Mapping',\n execute: applyFederatedMappings,\n },\n {\n name: 'Remove Unwanted Properties',\n execute: removeUnwantedProperties,\n },\n {\n name: 'Transform Data Based on Types',\n execute: transformDataBasedOnTypesWithoutWarnings,\n },\n {\n name: 'Evaluate Conditional Columns',\n execute: applyConditionalColumns,\n },\n {\n name: 'Transform Data Based on Types',\n execute: transformDataBasedOnTypes,\n }, // we do this again after conditional columns are applied\n ];\n }\n\n public static async transformAndValidateDataV2(\n client: EntitiesClient,\n loaderProcess: LoaderProcess,\n entityTypes: EntityType[],\n ): Promise<ProcessedData> {\n let failureArea: LoaderFailureArea = LoaderFailureArea.NONE;\n const transformationErrors: ProcessingIssues[] = [];\n const transformationWarnings: ProcessingIssues[] = [];\n const generalErrors: GeneralIssueDetails[] = [];\n const generalWarnings: GeneralIssueDetails[] = [];\n const systemErrors: GeneralIssueDetails[] = [];\n const preprocessingStepResults: PreprocessingStepStoredResultSummary[] = [];\n let processedData: any[] = [];\n\n try {\n // Step 1: Load CSV Data\n processedData = await this.loadCSVDataWithErrorHandling(client, loaderProcess, generalErrors);\n\n if (generalErrors.length) {\n failureArea = LoaderFailureArea.PARSING_CSV;\n return {\n csvRows: processedData,\n transformationErrors,\n transformationWarnings,\n generalErrors,\n generalWarnings,\n systemErrors,\n failureArea,\n };\n }\n\n // Step 2: Validate Data\n const processor = getProcessorForEntityTypes(entityTypes);\n const validationIssues = this.validateData(\n processor,\n processedData,\n loaderProcess,\n transformationErrors,\n transformationWarnings,\n generalErrors,\n generalWarnings,\n );\n\n if (validationIssues.hasErrors) {\n failureArea = LoaderFailureArea.VALIDATING_DATA;\n return {\n csvRows: processedData,\n transformationErrors,\n transformationWarnings,\n generalErrors,\n generalWarnings,\n systemErrors,\n failureArea,\n };\n }\n\n // Step 3: Preprocessing Pipeline\n const reducedTypes = await getReducedTypes(entityTypes, client);\n\n processedData = await this.runPreprocessingPipeline(\n client,\n loaderProcess,\n reducedTypes,\n processedData,\n preprocessingStepResults,\n transformationErrors,\n transformationWarnings,\n systemErrors,\n );\n\n // Step 4: Update Loader Process\n await this.updateLoaderProcess(client, loaderProcess.id, preprocessingStepResults, systemErrors);\n\n if (\n failureArea === LoaderFailureArea.NONE &&\n (transformationErrors.length || systemErrors.length || generalErrors.length)\n ) {\n failureArea = LoaderFailureArea.TRANSFORMING_DATA;\n }\n\n return {\n csvRows: processedData,\n transformationErrors,\n transformationWarnings,\n generalErrors,\n generalWarnings,\n systemErrors,\n failureArea,\n };\n } catch (e) {\n console.error('Error transforming data:', e.message);\n failureArea = LoaderFailureArea.TRANSFORMING_DATA;\n systemErrors.push({\n message: e.message,\n issueType: IssueType.SYSTEM_ERROR,\n });\n return {\n csvRows: processedData,\n failureArea,\n systemErrors,\n transformationErrors,\n transformationWarnings,\n generalErrors,\n generalWarnings,\n };\n }\n }\n\n public static async parseCSVRows(client: EntitiesClient, loaderProcess: LoaderProcess): Promise<ProcessedData> {\n const processedData: ProcessedData = {\n csvRows: [],\n transformationErrors: [],\n transformationWarnings: [],\n generalErrors: [],\n generalWarnings: [],\n systemErrors: [],\n failureArea: LoaderFailureArea.NONE,\n };\n\n try {\n const csvRows = await this.loadCSVDataWithErrorHandling(client, loaderProcess, processedData.generalErrors);\n processedData.csvRows = csvRows;\n\n if (processedData.generalErrors.length) {\n processedData.failureArea = LoaderFailureArea.PARSING_CSV;\n return processedData;\n }\n return processedData;\n } catch (e) {\n console.error('Error transforming data:', e.message);\n processedData.failureArea = LoaderFailureArea.TRANSFORMING_DATA;\n processedData.systemErrors.push({\n message: e.message,\n issueType: IssueType.SYSTEM_ERROR,\n });\n return processedData;\n }\n }\n\n public static async validateAndTransformDataV2(params: {\n client: EntitiesClient;\n loaderProcess: LoaderProcess;\n processedData: ProcessedData;\n entityTypes: EntityType[];\n types: Type[];\n }): Promise<ProcessedData> {\n const { client, loaderProcess, processedData, entityTypes, types } = params;\n try {\n const processor = getProcessorForEntityTypes(entityTypes);\n const validationIssues = this.validateData(\n processor,\n processedData.csvRows,\n loaderProcess,\n processedData.transformationErrors,\n processedData.transformationWarnings,\n processedData.generalErrors,\n processedData.generalWarnings,\n );\n\n if (validationIssues.hasErrors) {\n processedData.failureArea = LoaderFailureArea.VALIDATING_DATA;\n return processedData;\n }\n\n const preprocessingStepResults: PreprocessingStepStoredResultSummary[] = [];\n const processedRowData = await this.runPreprocessingPipeline(\n client,\n loaderProcess,\n types,\n processedData.csvRows,\n preprocessingStepResults,\n processedData.transformationErrors,\n processedData.transformationWarnings,\n processedData.systemErrors,\n );\n processedData.csvRows = processedRowData;\n\n // Step 4: Update Loader Process\n await this.updateLoaderProcess(client, loaderProcess.id, preprocessingStepResults, processedData.systemErrors);\n\n if (\n processedData.failureArea === LoaderFailureArea.NONE &&\n (processedData.transformationErrors.length ||\n processedData.systemErrors.length ||\n processedData.generalErrors.length)\n ) {\n processedData.failureArea = LoaderFailureArea.TRANSFORMING_DATA;\n }\n\n return processedData;\n } catch (e) {\n console.error('Error transforming data:', e.message);\n processedData.failureArea = LoaderFailureArea.TRANSFORMING_DATA;\n processedData.systemErrors.push({\n message: e.message,\n issueType: IssueType.SYSTEM_ERROR,\n });\n return processedData;\n }\n }\n\n // Step 1: Load CSV Data with Error Handling\n private static async loadCSVDataWithErrorHandling(\n client: EntitiesClient,\n loaderProcess: LoaderProcess,\n generalErrors: GeneralIssueDetails[],\n ): Promise<any[]> {\n try {\n return await this.loadCSVData(client, loaderProcess, generalErrors);\n } catch (e) {\n console.error('Error parsing CSV file:', e.message);\n generalErrors.push({\n message: e.message,\n issueType: IssueType.INVALID_DATA,\n });\n return [];\n }\n }\n\n // Step 2: Validate Data\n private static validateData(\n processor: any,\n processedData: any[],\n loaderProcess: LoaderProcess,\n transformationErrors: ProcessingIssues[],\n transformationWarnings: ProcessingIssues[],\n generalErrors: GeneralIssueDetails[],\n generalWarnings: GeneralIssueDetails[],\n ): { hasErrors: boolean } {\n const validationIssues = processor.validateLoadFile(processedData, loaderProcess);\n\n generalErrors.push(...(validationIssues.generalErrors ?? []));\n generalWarnings.push(...(validationIssues.generalWarnings ?? []));\n transformationErrors.push(...(validationIssues.errors ?? []));\n transformationWarnings.push(...(validationIssues.warnings ?? []));\n\n return {\n hasErrors: generalErrors.length > 0 || transformationErrors.length > 0,\n };\n }\n\n // Step 3: Run Preprocessing Pipeline\n private static async runPreprocessingPipeline(\n client: EntitiesClient,\n loaderProcess: LoaderProcess,\n reducedTypes: any[],\n processedData: any[],\n preprocessingStepResults: PreprocessingStepStoredResultSummary[],\n transformationErrors: ProcessingIssues[],\n transformationWarnings: ProcessingIssues[],\n systemErrors: GeneralIssueDetails[],\n ): Promise<any[]> {\n const { typePropertiesBySlug, typePropertiesByLabel } = getPropertiesBySlugAndLabel(reducedTypes);\n const optionSetUsingTypePropertiesBySlug = getOptionSetsUsingTypePropertiesBySlug(reducedTypes);\n const typePropertyMaps: TypePropertyMaps = {\n typePropertiesBySlug,\n typePropertiesByLabel,\n optionSetUsingTypePropertiesBySlug,\n };\n\n for (const preprocessingStep of this.getPreprocessingPipeline()) {\n try {\n const stepResult = preprocessingStep.execute(processedData, loaderProcess, typePropertyMaps);\n processedData = stepResult.rows;\n\n const fileId = await this.uploadStepResult(client, loaderProcess.id, preprocessingStep.name, stepResult);\n\n preprocessingStepResults.push({\n preprocessingStepName: preprocessingStep.name,\n fileId,\n numberOfErrors: stepResult.errors?.length || 0,\n numberOfWarnings: stepResult.warnings?.length || 0,\n });\n\n transformationErrors.push(...(stepResult.errors ?? []));\n transformationWarnings.push(...(stepResult.warnings ?? []));\n this.logIssues(preprocessingStep.name, stepResult.errors, stepResult.warnings);\n } catch (e) {\n const errorMessage = `Error in preprocessing step ${preprocessingStep.name}: ${e.message}`;\n console.error(errorMessage);\n systemErrors.push({\n message: errorMessage,\n issueType: IssueType.SYSTEM_ERROR,\n });\n break;\n }\n }\n\n return processedData;\n }\n\n private static async loadCSVData(\n client: EntitiesClient,\n loaderProcess: LoaderProcess,\n generalErrors: GeneralIssueDetails[],\n ): Promise<any[]> {\n const csvJSON = await getCSVFromFile(loaderProcess.loadFileId, client);\n if (csvJSON?.length === 0) {\n generalErrors.push({\n message: 'CSV file is empty',\n issueType: IssueType.INVALID_DATA,\n });\n }\n\n return csvJSON;\n }\n\n private static logIssues(stepName: string, errors?: ProcessingIssues[], warnings?: ProcessingIssues[]) {\n errors?.forEach((error) => console.error(`Error in preprocessing step ${stepName}`, error));\n warnings?.forEach((warning) => console.warn(`Warning in preprocessing step ${stepName}`, warning));\n }\n\n private static async updateLoaderProcess(\n client: EntitiesClient,\n loaderProcessId: string,\n preprocessingStepResults: PreprocessingStepStoredResultSummary[],\n systemErrors: GeneralIssueDetails[],\n ) {\n try {\n await client.update({\n entityName: 'loader-process',\n id: loaderProcessId,\n object: { preprocessingStepResults },\n });\n } catch (e) {\n const errorMessage = `Error updating loader process with preprocessing results: ${e.message}`;\n console.error(errorMessage);\n systemErrors.push({\n message: errorMessage,\n issueType: IssueType.SYSTEM_ERROR,\n });\n }\n }\n\n static async uploadStepResult(\n client: EntitiesClient,\n loaderProcessId: string,\n stepName: string,\n stepResult: StepResultOutputV2,\n ): Promise<string> {\n const stringObject = JSON.stringify(stepResult);\n const buffer = Buffer.from(stringObject);\n const contentType = 'application/json';\n const fileName = `loader-process-step-${stepName}.json`;\n const fileEntity = await client.create({\n entityName: 'file',\n object: {\n contentType,\n fileName,\n ownedByReference: `loader-process:${loaderProcessId}`,\n },\n });\n\n await uploadFileAsStream(fileEntity?.uploadPost, buffer, contentType);\n\n if (!fileEntity?.id) {\n console.warn(`Could not save process logs. loaderProcessId: ${loaderProcessId} stepName: ${stepName}`);\n }\n\n return fileEntity?.id;\n }\n}\n","import {\n EntitiesClient,\n LoadType,\n EntityType,\n ProcessingIssues,\n GeneralIssueDetails,\n ColumnDefinition,\n AssortmentSplit,\n LoaderProcess,\n LoadStatus,\n PreValidationResult,\n PreValidationIssue,\n PreValidationSummary,\n PreValidationCategory,\n PreValidationSeverity,\n AffectedRow,\n SuggestedFix,\n SuggestedFixType,\n} from '@contrail/entity-types';\nimport { TypePropertyMaps } from '../common/data-transformer-functions';\nimport { TypesByPath } from '../entities-v2/entities-helper';\n\n// Re-export commonly used types for consumer convenience\nexport {\n EntitiesClient,\n LoadType,\n EntityType,\n ProcessingIssues,\n GeneralIssueDetails,\n PreValidationResult,\n PreValidationIssue,\n PreValidationSummary,\n PreValidationCategory,\n PreValidationSeverity,\n AffectedRow,\n SuggestedFix,\n SuggestedFixType,\n TypePropertyMaps,\n TypesByPath,\n};\n\n// ---------------------------------------------------------------------------\n// LoaderConfig — clean configuration input for the pipeline\n// ---------------------------------------------------------------------------\n\nexport interface LoaderConfig {\n loadType: LoadType[];\n\n federatedMappings?: Record<string, string>;\n\n conditionalColumns?: ColumnDefinition[];\n\n propertiesToRemove?: string[];\n\n /** Column name whose value is a timestamp used to skip stale updates */\n skipStaleUpdatesUsing?: string;\n\n workspaceIdentifier?: string;\n\n options?: LoaderOptions;\n\n assortmentConfig?: AssortmentConfig;\n}\n\nexport interface LoaderOptions {\n /** Batch size for create/update operations (default: 25) */\n batchSize?: number;\n /** Max concurrent SDK calls (default: 5) */\n concurrency?: number;\n /** Max retries on SDK timeout errors (default: 3) */\n maxRetries?: number;\n /** Strip family name from updates to prevent overwriting */\n ignoreFamilyNameOnUpdate?: boolean;\n /** Strip option name from updates to prevent overwriting */\n ignoreOptionNameOnUpdate?: boolean;\n}\n\nexport interface AssortmentConfig {\n assortmentId?: string;\n partialUpdate?: boolean;\n dropField?: string;\n splitConfig?: AssortmentSplit;\n}\n\n// ---------------------------------------------------------------------------\n// Type definitions result (fetched before preprocessing and column analysis)\n// ---------------------------------------------------------------------------\n\nexport interface TypeDefinitionsResult {\n typePropertyMaps: TypePropertyMaps;\n typesByPath: TypesByPath;\n entityTypes: EntityType[];\n}\n\n// ---------------------------------------------------------------------------\n// Stage 1 — preprocess result (now runs before column analysis)\n// ---------------------------------------------------------------------------\n\n// (PreprocessResult defined below)\n\n// ---------------------------------------------------------------------------\n// Stage 2 — analyzeColumns result (now runs after preprocessing)\n// ---------------------------------------------------------------------------\n\nexport interface ColumnAnalysisResult {\n columns: ColumnMetaData[];\n typePropertyMaps: TypePropertyMaps;\n typesByPath: TypesByPath;\n entityTypes: EntityType[];\n}\n\nexport interface ColumnMetaData {\n /** Original CSV column header */\n csvHeader: string;\n /** Matched type property slug, if found */\n matchedSlug?: string;\n /** Matched type property label, if found */\n matchedLabel?: string;\n /** Property type (e.g. 'string', 'number', 'choice') */\n propertyType?: string;\n /** Whether this is a required system property */\n isRequired: boolean;\n /** Additional context about the requirement (e.g. 'paired with optionName') */\n requiredNote?: string;\n /** Whether this column matched an existing type property */\n isMapped: boolean;\n /** Whether the matched property is archived/disabled */\n isArchived: boolean;\n /** Whether the matched property has an option set (choice/multi_select) */\n hasOptionSet: boolean;\n}\n\n// ---------------------------------------------------------------------------\n// Stage 2 — preprocess result\n// ---------------------------------------------------------------------------\n\nexport interface PreprocessResult {\n /** Transformed rows ready for validation/entity construction */\n rows: Record<string, any>[];\n /** Row-level transformation errors */\n errors: ProcessingIssues[];\n /** Row-level transformation warnings */\n warnings: ProcessingIssues[];\n /** General (non-row-specific) errors */\n generalErrors: GeneralIssueDetails[];\n /** General (non-row-specific) warnings */\n generalWarnings: GeneralIssueDetails[];\n /** Per-step metadata for debugging */\n stepResults: PreprocessingStepSummary[];\n}\n\nexport interface PreprocessingStepSummary {\n stepName: string;\n rowCountAfter: number;\n errorCount: number;\n warningCount: number;\n}\n\n// ---------------------------------------------------------------------------\n// Stage 3 — validate result (PreValidationResult from @contrail/entity-types)\n// ---------------------------------------------------------------------------\n\n// ---------------------------------------------------------------------------\n// Stage 4 — preview result\n// ---------------------------------------------------------------------------\n\nexport interface PreviewResult {\n entities: EntityPreviewSummary[];\n /** Rows that failed entity construction (bad typePath, missing federatedId, etc.) */\n badRows: SkippedRow[];\n /** Rows skipped due to stale timestamps (skipStaleUpdatesUsing) */\n staleRows: SkippedRow[];\n /** Warnings from object reference resolution, size range validation, etc. */\n warnings: string[];\n /** Constructed entities data, keyed by entity type — used by execute stage */\n constructedEntities?: Record<string, ConstructedEntitySet>;\n}\n\nexport interface EntityPreviewSummary {\n entityType: string;\n total: number;\n creates: number;\n updates: number;\n drops: number;\n unchanged: number;\n skippedStale: number;\n}\n\nexport interface SkippedRow {\n rowNumber: number;\n federatedId?: string;\n reason: string;\n /** Additional context (e.g., incoming vs existing timestamp for stale rows) */\n details?: Record<string, any>;\n}\n\n/** Internal: the constructed entities and their current-state lookup for a single entity type */\nexport interface ConstructedEntitySet {\n incomingEntities: any[];\n badEntities: any[];\n allCurrentEntitiesByFederatedId: Record<string, any>;\n typesByPath: TypesByPath;\n projectId?: string;\n generalWarnings?: GeneralIssueDetails[];\n}\n\n// ---------------------------------------------------------------------------\n// Stage 5 — execute result\n// ---------------------------------------------------------------------------\n\nexport interface ExecutionResult {\n status: 'complete' | 'partial-failure' | 'failed';\n entities: EntityExecutionSummary[];\n /** Rows that were skipped before persistence (bad rows + stale rows) */\n skippedRows: SkippedRow[];\n /** Non-fatal warnings */\n warnings: string[];\n /** Total duration in milliseconds */\n duration: number;\n}\n\nexport interface EntityExecutionSummary {\n entityType: string;\n created: number;\n updated: number;\n dropped: number;\n skippedStale: number;\n failed: number;\n failures: EntityFailure[];\n}\n\nexport interface EntityFailure {\n federatedId: string;\n operation: 'create' | 'update' | 'drop';\n error: string;\n}\n\nexport interface ExecuteOptions {\n /** Batch size for create/update operations (default: 25) */\n batchSize?: number;\n /** Max concurrent SDK calls (default: 5) */\n concurrency?: number;\n /** Progress callback */\n onProgress?: (progress: ProgressEvent) => void;\n /** Whether to skip assortment publish (default: false) */\n skipAssortmentPublish?: boolean;\n /** Max retries on SDK timeout errors (default: 3) */\n maxRetries?: number;\n}\n\nexport interface ProgressEvent {\n stage: string;\n current: number;\n total: number;\n}\n\n// ---------------------------------------------------------------------------\n// Utility: bridge LoaderConfig → LoaderProcess for backward compatibility\n// ---------------------------------------------------------------------------\n\n/**\n * Converts a LoaderConfig to a LoaderProcess-compatible object.\n * This allows calling existing library functions that expect LoaderProcess.\n */\nexport function toLoaderProcessCompat(config: LoaderConfig): LoaderProcess {\n const lp: LoaderProcess = {\n id: 'pipeline-process',\n loadFileId: '',\n status: LoadStatus.ACTIVE,\n loadType: config.loadType,\n federatedMappings: config.federatedMappings,\n conditionalColumns: config.conditionalColumns,\n propertiesToRemove: config.propertiesToRemove,\n skipStaleUpdatesUsing: config.skipStaleUpdatesUsing,\n workspaceIdentifier: config.workspaceIdentifier,\n ignoreParameters: { ignoreFamilyNameOnUpdate: config.options?.ignoreFamilyNameOnUpdate ?? false, ignoreOptionNameOnUpdate: config.options?.ignoreOptionNameOnUpdate ?? false },\n shouldSkipAssortmentPublish: false, // TODO update this when we do assortments as part of AssorgmentConfig or AssortmentSplit\n };\n if (config.assortmentConfig?.splitConfig) {\n lp.assortmentSplit = config.assortmentConfig.splitConfig;\n }\n if (config.assortmentConfig?.partialUpdate) {\n lp.partialAssortmentUpdate = config.assortmentConfig.partialUpdate;\n }\n if (config.assortmentConfig?.dropField) {\n lp.assortmentItemDropField = config.assortmentConfig.dropField;\n }\n return lp;\n}\n\n/**\n * Maps LoadType[] to the corresponding EntityType[].\n * LoadType is user-facing (ITEM, PROJECT_ITEM, ASSORTMENT, COLOR, CUSTOM_ENTITY).\n * EntityType is the internal processor key.\n */\nexport function loadTypeToEntityTypes(loadTypes: LoadType[]): EntityType[] {\n const mapping: Record<string, EntityType> = {\n [LoadType.ITEM]: EntityType.ITEM,\n [LoadType.PROJECT_ITEM]: EntityType.PROJECT_ITEM,\n [LoadType.ASSORTMENT]: EntityType.ASSORTMENT,\n [LoadType.COLOR]: EntityType.COLOR,\n [LoadType.CUSTOM_ENTITY]: EntityType.CUSTOM_ENTITY,\n // TODO: Add Size Range Template\n };\n\n const entityTypes: EntityType[] = [];\n for (const loadType of loadTypes) {\n const entityType = mapping[loadType];\n if (entityType && !entityTypes.includes(entityType)) {\n entityTypes.push(entityType);\n }\n }\n return entityTypes;\n}\n\n/**\n * Gets the type roots (e.g., 'item', 'color', 'custom-entity') from entity types.\n * Used to fetch type definitions from the API.\n */\nexport function entityTypesToTypeRoots(entityTypes: EntityType[]): string[] {\n // EntityType enum values are already the root slugs ('item', 'color', etc.)\n // Map entity types to their type roots for API calls.\n // Each entity type has its own type root with its own property definitions.\n const roots = new Set<string>();\n for (const entityType of entityTypes) {\n switch (entityType) {\n case EntityType.ITEM:\n roots.add('item');\n break;\n case EntityType.ASSORTMENT:\n roots.add('assortment-item');\n break;\n case EntityType.PROJECT_ITEM:\n roots.add('project-item');\n break;\n case EntityType.COLOR:\n roots.add('color');\n break;\n case EntityType.CUSTOM_ENTITY:\n roots.add('custom-entity');\n break;\n default:\n roots.add(entityType);\n }\n }\n return Array.from(roots);\n}\n","import { ObjectUtil } from '@contrail/util';\nimport { Type, TypeProperty, PropertyType } from '@contrail/types';\nimport { chunk, uniq } from 'lodash';\nimport { EntitiesClient, GeneralIssueDetails, IssueType, TimeoutError } from '@contrail/entity-types';\n\nconst pLimit = require('p-limit');\n\nexport enum EntitiesLambdaCallType {\n GET = 'GET',\n CREATE = 'CREATE',\n UPDATE = 'UPDATE',\n DELETE = 'DELETE',\n BATCHCREATE = 'BATCHCREATE',\n BATCHUPDATE = 'BATCHUPDATE',\n}\n\nexport interface TypesByPath {\n [key: string]: {\n type: Type;\n allPropertiesSlugs: string[];\n typePropertyToValueType: { [key: string]: PropertyType };\n objectReferenceProperties: TypeProperty[];\n userListProperties: TypeProperty[];\n };\n}\n\nexport async function retryOnTimeout(\n client: EntitiesClient,\n callType: EntitiesLambdaCallType,\n callParams: any,\n maxRetries = 3,\n): Promise<any> {\n let callCount = 0;\n let done = false;\n let response;\n if (!client) {\n throw new Error('No client to use.');\n }\n\n while (!done && callCount <= maxRetries) {\n try {\n if (callCount > 0) {\n console.debug('Retrying call - Attempt: ', callCount);\n }\n switch (callType) {\n case EntitiesLambdaCallType.GET:\n response = await client.get(callParams);\n break;\n case EntitiesLambdaCallType.CREATE:\n response = await client.create(callParams);\n break;\n case EntitiesLambdaCallType.UPDATE:\n response = await client.update(callParams);\n break;\n case EntitiesLambdaCallType.DELETE:\n response = await client.delete(callParams);\n break;\n case EntitiesLambdaCallType.BATCHCREATE:\n response = await client.batchCreate(callParams);\n break;\n case EntitiesLambdaCallType.BATCHUPDATE:\n response = await client.batchUpdate(callParams);\n break;\n default:\n throw Error('Invalid EntitiesLambdaCallType');\n }\n\n done = true;\n } catch (e) {\n if (e instanceof TimeoutError && callCount + 1 <= maxRetries) {\n console.warn(`Lambda call failed due to timeout. callType: ${callType}, callParams: `, callParams);\n } else {\n console.error('Failed Lambda call. ', e);\n throw e;\n }\n }\n callCount++;\n }\n\n return response;\n}\n\nexport function UpdateNeeded(incoming, existing, fieldsToSkip = [], fieldsToSkipIfOnlyOnExisting = [], type?: Type) {\n console.debug('Comparing existing and incoming objects...');\n const diffs = compareIncomingAndExisting(incoming, existing, fieldsToSkip, fieldsToSkipIfOnlyOnExisting, type);\n return diffs?.length > 0;\n}\n\nexport function compareIncomingAndExisting(\n incoming,\n existing,\n fieldsToSkip = [],\n fieldsToSkipIfOnlyOnExisting = [],\n type?: Type,\n) {\n const slimExisting: any = {};\n const keys = Object.keys(incoming);\n\n const cloneIncoming = ObjectUtil.cloneDeep(incoming);\n for (const key of keys) {\n parseDateOrNumberKey(cloneIncoming, key);\n slimExisting[key] = existing[key];\n parseDateOrNumberKey(slimExisting, key);\n }\n\n for (const fieldToSkip of fieldsToSkip) {\n delete slimExisting[fieldToSkip];\n delete cloneIncoming[fieldToSkip];\n }\n\n if (type) {\n const typePropertiesToSkip = type?.typeProperties\n ?.filter((x) =>\n [PropertyType.ObjectReference, PropertyType.TypeReference, PropertyType.UserList].includes(x.propertyType),\n )\n ?.map((x) => x.slug);\n\n for (const typePropertyToSkip of typePropertiesToSkip) {\n delete slimExisting[typePropertyToSkip];\n delete cloneIncoming[typePropertyToSkip];\n }\n }\n\n for (const fieldToSkipIfOnlyOnExisting of fieldsToSkipIfOnlyOnExisting) {\n if (\n Object.prototype.hasOwnProperty.call(slimExisting, fieldToSkipIfOnlyOnExisting) &&\n !Object.prototype.hasOwnProperty.call(cloneIncoming, fieldToSkipIfOnlyOnExisting)\n ) {\n delete slimExisting[fieldToSkipIfOnlyOnExisting];\n delete cloneIncoming[fieldToSkipIfOnlyOnExisting];\n }\n }\n\n const objectDiffs = ObjectUtil.compareDeep(slimExisting, cloneIncoming, '');\n return objectDiffs;\n}\n\nexport function parseDateOrNumberKey(obj, key, propertyType?) {\n const value = obj[key];\n if (!propertyType) {\n if (value != null && value instanceof Date) {\n obj[key] = `${value.toISOString()}`;\n } else if (value != null && typeof value === 'string' && value !== '') {\n const parse = Number(value);\n if (!isNaN(parse)) {\n obj[key] = parse;\n }\n }\n } else {\n if (value != null && propertyType === PropertyType.Date) {\n if (value instanceof Date) {\n obj[key] = `${value.toISOString()}`;\n } else {\n console.warn('PropertyType.Date is set but the value is not a Date object', value);\n obj[key] = null;\n }\n } else if (propertyType === PropertyType.Number) {\n const parse = Number(value);\n if (!isNaN(parse)) {\n obj[key] = parse;\n }\n }\n }\n}\n\nexport async function assignObjectReferences(\n client: EntitiesClient,\n typePaths: string[],\n typesByPath: TypesByPath,\n incomingEntities: any[],\n): Promise<GeneralIssueDetails[]> {\n const limit = pLimit(5);\n\n // get all object references\n const allObjectReferenceColumnsWithRootType = [];\n for (const typePath of typePaths ?? []) {\n const typeObj = typesByPath[typePath];\n if (!(typeObj?.objectReferenceProperties?.length > 0)) {\n console.debug(`No ObjectReferences for ${typePath}, skipping.`);\n continue;\n }\n\n for (const objectReferenceProperty of typeObj?.objectReferenceProperties ?? []) {\n const slug = objectReferenceProperty.slug;\n const rootType = objectReferenceProperty.referencedTypeRootSlug;\n const referencedTypePath = objectReferenceProperty.referencedTypePath;\n allObjectReferenceColumnsWithRootType.push({\n slug,\n rootType,\n referencedTypePath,\n });\n }\n }\n\n const allORFedIdsByType = {};\n for (const entity of incomingEntities) {\n for (const allORColumnWithRootType of allObjectReferenceColumnsWithRootType) {\n const slug = allORColumnWithRootType.slug;\n const levelVariants = getPropertyVariants(entity, slug, 'values');\n\n for (let fedId of levelVariants) {\n if (!allORFedIdsByType[allORColumnWithRootType.rootType]) {\n allORFedIdsByType[allORColumnWithRootType.rootType] = [];\n }\n\n // custom entities must start with their typePath\n if (\n !fedId.startsWith('custom-entity:') &&\n (allORColumnWithRootType.referencedTypePath as string).includes('custom-entity')\n ) {\n fedId = `${allORColumnWithRootType.referencedTypePath}:${fedId}`;\n }\n allORFedIdsByType[allORColumnWithRootType.rootType].push(fedId);\n }\n }\n }\n\n const allORByFedId = {};\n for (const rootType of Object.keys(allORFedIdsByType)) {\n const fedIds: string[] = [...new Set<string>(allORFedIdsByType[rootType])];\n const chunks: string[][] = chunk(fedIds, 200);\n const federatedPromises = [];\n // tslint:disable-next-line: forin\n for (const chunk of chunks) {\n if (!chunk?.length) {\n continue;\n }\n const federatedPromise = limit(async () => {\n try {\n const currentORBatch = await retryOnTimeout(client, EntitiesLambdaCallType.GET, {\n entityName: rootType,\n federatedIds: uniq(chunk),\n skipHydrateRelationships: true,\n });\n if (!currentORBatch) {\n // console.warn('No ObjectReferences were returned.');\n }\n if (currentORBatch?.length > 0) {\n for (const currentOR of currentORBatch) {\n allORByFedId[currentOR.federatedId] = currentOR;\n }\n }\n } catch (e) {\n const errorMessage = `'Failed to get ObjectReferences by FederatedIds: ${e}`;\n console.error(errorMessage);\n throw new Error(errorMessage);\n }\n });\n federatedPromises.push(federatedPromise);\n }\n\n await Promise.all(federatedPromises);\n console.info(`ObjectReferences lookup complete. ${Object.keys(allORByFedId)?.length} Object References retrieved`);\n }\n\n const objectReferenceWarnings = new Set<string>();\n for (const entity of incomingEntities) {\n for (const allORColumnWithRootType of allObjectReferenceColumnsWithRootType) {\n const slug = allORColumnWithRootType.slug;\n const levelVariants = getPropertyVariants(entity, slug, 'keyValue') as Array<{ key: string; value: any }>;\n\n for (const variant of levelVariants) {\n let fedId = variant.value;\n if (!fedId) continue;\n\n if (\n !fedId.startsWith('custom-entity:') &&\n (allORColumnWithRootType.referencedTypePath as string).includes('custom-entity')\n ) {\n fedId = `${allORColumnWithRootType.referencedTypePath}:${fedId}`;\n }\n\n const objectReference = allORByFedId[fedId];\n if (!objectReference) {\n const message = `ObjectReference not found for ${slug} with value ${fedId}`;\n objectReferenceWarnings.add(message);\n console.warn(message);\n continue;\n }\n\n entity[variant.key + 'Id'] = objectReference.id;\n delete entity[variant.key];\n }\n }\n }\n\n return Array.from(objectReferenceWarnings).map((warning) => ({\n message: warning,\n issueType: IssueType.INVALID_DATA,\n }));\n}\n\nexport async function getUsersInOrg(client: EntitiesClient) {\n return await client.get({ entityName: 'user', relation: 'usersInOrg' });\n}\n\nexport async function assignUserLists(\n client: EntitiesClient,\n typePaths: string[],\n typesByPath: TypesByPath,\n incomingEntities: any[],\n) {\n const hasUserListProps = (typePaths ?? []).some((typePath) => {\n const typeObj = typesByPath[typePath];\n return typeObj?.userListProperties?.length > 0;\n });\n\n if (!hasUserListProps) {\n console.debug(`No user list properties for this load, skipping.`);\n return;\n }\n\n // get all user lists\n const users = await getUsersInOrg(client);\n const userEmailToIdMap = [];\n for (const user of users) {\n userEmailToIdMap[user.email] = user.id;\n }\n for (const typePath of typePaths ?? []) {\n const typeObj = typesByPath[typePath];\n if (!(typeObj?.userListProperties?.length > 0)) {\n console.debug(`No user lists for ${typePath}, skipping.`);\n continue;\n }\n\n for (const entity of incomingEntities) {\n for (const userListProperty of typeObj.userListProperties ?? []) {\n const slug = userListProperty.slug;\n const value = entity[slug];\n if (!value) {\n continue;\n }\n let userId = userEmailToIdMap[value];\n if (!userId) {\n userId = null;\n }\n entity[slug + 'Id'] = userId;\n delete entity[slug];\n }\n }\n }\n}\n\n/**\n * Gets property variants (base/family/option) from an entity, prioritizing family/option over base values\n *\n * @param entity - The entity object\n * @param slug - Base property slug (e.g. 'lifecycleStage')\n * @param returnType - 'values' returns array of values, 'keyValue' returns array of key-value pairs\n * @returns Array of values or key-value pairs\n *\n * @example\n * const entity = {\n * lifecycleStage: 'Development',\n * lifecycleStageFamily: 'Released'\n * };\n *\n * // Returns ['Released'] - Family takes priority over base value\n * getPropertyVariants(entity, 'lifecycleStage', 'values');\n *\n * // Returns [{ key: 'lifecycleStageFamily', value: 'Released' }]\n * getPropertyVariants(entity, 'lifecycleStage', 'keyValue');\n */\nexport function getPropertyVariants(\n entity: any,\n slug: string,\n returnType: 'values' | 'keyValue' = 'values',\n): Array<any> | Array<{ key: string; value: any }> {\n const hasFamilyOrOption = entity.hasOwnProperty(`${slug}Family`) || entity.hasOwnProperty(`${slug}Option`);\n const variants = [];\n\n // Add Family/Option variants if they exist\n if (entity.hasOwnProperty(`${slug}Family`)) {\n variants.push(\n returnType === 'values' ? entity[`${slug}Family`] : { key: `${slug}Family`, value: entity[`${slug}Family`] },\n );\n }\n if (entity.hasOwnProperty(`${slug}Option`)) {\n variants.push(\n returnType === 'values' ? entity[`${slug}Option`] : { key: `${slug}Option`, value: entity[`${slug}Option`] },\n );\n }\n\n // Only add base slug if no Family/Option exists\n if (!hasFamilyOrOption && entity.hasOwnProperty(slug)) {\n variants.push(returnType === 'values' ? entity[slug] : { key: slug, value: entity[slug] });\n }\n\n return variants;\n}\n","import { EntitiesClient, EntityType } from '@contrail/entity-types';\nimport {\n getReducedTypes,\n getPropertiesBySlugAndLabel,\n getOptionSetsUsingTypePropertiesBySlug,\n TypePropertyMaps,\n} from '../common/data-transformer-functions';\nimport { buildTypesByPath } from '../common/type-helper';\nimport {\n LoaderConfig,\n TypeDefinitionsResult,\n loadTypeToEntityTypes,\n entityTypesToTypeRoots,\n} from './types';\n\n/**\n * Fetch type definitions from the API and build lookup maps.\n *\n * This runs before both preprocessing and column analysis so that\n * type-aware operations (coercion, transform) have the maps they need,\n * and column classification can run on post-preprocessed headers.\n */\nexport async function fetchTypeDefinitions(\n client: EntitiesClient,\n rows: Record<string, any>[],\n config: LoaderConfig,\n): Promise<TypeDefinitionsResult> {\n const entityTypes = loadTypeToEntityTypes(config.loadType);\n\n if (!rows?.length) {\n return {\n typePropertyMaps: { typePropertiesBySlug: {}, typePropertiesByLabel: {}, optionSetUsingTypePropertiesBySlug: {} },\n typesByPath: {},\n entityTypes,\n };\n }\n\n const typeRoots = entityTypesToTypeRoots(entityTypes);\n\n // Fetch type definitions with all properties (including archived)\n const reducedTypes = await getReducedTypes(typeRoots, client);\n\n // Build lookup maps\n const { typePropertiesBySlug, typePropertiesByLabel } = getPropertiesBySlugAndLabel(reducedTypes);\n const optionSetUsingTypePropertiesBySlug = getOptionSetsUsingTypePropertiesBySlug(reducedTypes);\n const typePropertyMaps: TypePropertyMaps = {\n typePropertiesBySlug,\n typePropertiesByLabel,\n optionSetUsingTypePropertiesBySlug,\n };\n\n // Build TypesByPath for all type paths found in the data\n const typePaths = extractTypePaths(rows, entityTypes);\n const typesByPath = typePaths.length > 0\n ? await buildTypesByPath(client, typePaths, [], entityTypes[0] ?? 'item')\n : {};\n\n return {\n typePropertyMaps,\n typesByPath,\n entityTypes,\n };\n}\n\n/**\n * Extract unique typePath values from the data rows.\n * Falls back to entity type root if no typePath column is present.\n */\nfunction extractTypePaths(rows: Record<string, any>[], entityTypes: EntityType[]): string[] {\n const paths = new Set<string>();\n\n for (const row of rows) {\n if (row.typePath) {\n paths.add(row.typePath);\n }\n }\n\n // If no typePath column, use the entity type roots as defaults\n if (paths.size === 0) {\n for (const entityType of entityTypes) {\n paths.add(entityType);\n }\n }\n\n return Array.from(paths);\n}\n","import { EntityType } from '@contrail/entity-types';\nimport { TypePropertyMaps } from '../common/data-transformer-functions';\nimport {\n LoaderConfig,\n ColumnAnalysisResult,\n ColumnMetaData,\n TypeDefinitionsResult,\n loadTypeToEntityTypes,\n} from './types';\n\n/** Required system properties for non-item loads */\nconst BASE_REQUIRED_PROPERTIES = new Set([\n 'federatedId',\n 'name',\n 'typePath',\n]);\n\n/** Required system properties for item loads */\nconst ITEM_REQUIRED_PROPERTIES = new Set([\n 'itemFamilyFederatedId',\n 'name',\n]);\n\n/**\n * Properties that are required together for item loads.\n * If one is present the other must be too; if both absent, the row is a family-only row.\n */\nconst ITEM_PAIRED_PROPERTIES = new Set([\n 'itemOptionFederatedId',\n 'optionName',\n]);\n\n/** System properties that are always recognized regardless of type definition */\nconst SYSTEM_PROPERTIES = new Set([\n ...BASE_REQUIRED_PROPERTIES,\n 'itemFamilyFederatedId',\n 'itemOptionFederatedId',\n 'optionGroup',\n 'optionName',\n]);\n\n/** Additional system properties recognized per entity type */\nconst ENTITY_TYPE_SYSTEM_PROPERTIES: Partial<Record<EntityType, Set<string>>> = {\n [EntityType.PROJECT_ITEM]: new Set(['workspaceIdentifier', 'projectId']),\n [EntityType.ASSORTMENT]: new Set(['assortmentId']),\n};\n\n/**\n * Stage 2: Analyze CSV columns against type definitions.\n *\n * Runs after preprocessing so that column headers reflect federated mappings,\n * conditional columns, and other transformations. Uses pre-fetched type\n * definitions to classify each column.\n */\nexport function analyzeColumns(\n rows: Record<string, any>[],\n config: LoaderConfig,\n typeDefs: TypeDefinitionsResult,\n): ColumnAnalysisResult {\n const { typePropertyMaps, typesByPath, entityTypes } = typeDefs;\n\n if (!rows?.length) {\n return {\n columns: [],\n typePropertyMaps,\n typesByPath,\n entityTypes,\n };\n }\n\n const { typePropertiesBySlug, typePropertiesByLabel } = typePropertyMaps;\n const optionSetUsingTypePropertiesBySlug = typePropertyMaps.optionSetUsingTypePropertiesBySlug;\n\n // Classify each CSV column from the preprocessed rows\n const csvHeaders = extractUniqueHeaders(rows);\n const columns: ColumnMetaData[] = csvHeaders.map((header) =>\n classifyColumn(header, typePropertiesBySlug, typePropertiesByLabel, optionSetUsingTypePropertiesBySlug, entityTypes),\n );\n\n return {\n columns,\n typePropertyMaps,\n typesByPath,\n entityTypes,\n };\n}\n\n/**\n * Extract all unique column headers from the rows, preserving order.\n */\nfunction extractUniqueHeaders(rows: Record<string, any>[]): string[] {\n const seen = new Set<string>();\n const headers: string[] = [];\n\n for (const row of rows) {\n for (const key of Object.keys(row)) {\n if (!seen.has(key)) {\n seen.add(key);\n headers.push(key);\n }\n }\n }\n\n return headers;\n}\n\n/**\n * Classify a single CSV column header against type property maps.\n */\nfunction classifyColumn(\n header: string,\n typePropertiesBySlug: Record<string, any>,\n typePropertiesByLabel: Record<string, any>,\n optionSetProps: Record<string, any>,\n entityTypes: EntityType[],\n): ColumnMetaData {\n const isItemLoad = entityTypes.includes(EntityType.ITEM) || entityTypes.includes(EntityType.PROJECT_ITEM);\n const isEntityTypeSystemProp = entityTypes.some((et) => ENTITY_TYPE_SYSTEM_PROPERTIES[et]?.has(header));\n const isSystemProp = SYSTEM_PROPERTIES.has(header) || isEntityTypeSystemProp;\n const slugMatch = typePropertiesBySlug[header];\n const labelMatch = typePropertiesByLabel[header];\n\n // Check for Family/Option suffix variants\n const baseName = stripLevelSuffix(header);\n const baseSlugMatch = baseName !== header ? typePropertiesBySlug[baseName] : undefined;\n\n const matchedProp = slugMatch || labelMatch || baseSlugMatch;\n const isMapped = !!matchedProp || isSystemProp;\n const isArchived = matchedProp?.isArchived === true;\n const hasOptionSet = !!(optionSetProps[header] || optionSetProps[baseName]);\n\n // Determine required status based on entity type\n let isRequired: boolean;\n let requiredNote: string | undefined;\n\n if (isItemLoad) {\n if (ITEM_REQUIRED_PROPERTIES.has(header)) {\n isRequired = true;\n } else if (ITEM_PAIRED_PROPERTIES.has(header)) {\n isRequired = true;\n const pairedWith = header === 'itemOptionFederatedId' ? 'optionName' : 'itemOptionFederatedId';\n requiredNote = `paired with ${pairedWith}`;\n } else {\n isRequired = false;\n }\n } else {\n isRequired = BASE_REQUIRED_PROPERTIES.has(header);\n }\n\n return {\n csvHeader: header,\n matchedSlug: slugMatch?.slug || baseSlugMatch?.slug,\n matchedLabel: labelMatch?.label,\n propertyType: matchedProp?.propertyType,\n isRequired,\n requiredNote,\n isMapped,\n isArchived,\n hasOptionSet,\n };\n}\n\n/**\n * Strip 'Family' or 'Option' suffix from a property name.\n */\nfunction stripLevelSuffix(name: string): string {\n if (name.endsWith('Family')) return name.slice(0, -6);\n if (name.endsWith('Option')) return name.slice(0, -6);\n return name;\n}\n","import { GeneralIssueDetails, IssueType, ProcessingIssues } from '@contrail/entity-types';\nimport {\n TypePropertyMaps,\n applyFederatedMappings,\n applyConditionalColumns,\n removeUnwantedProperties,\n trimValues,\n transformDataBasedOnTypes,\n} from '../common/data-transformer-functions';\nimport { LoaderConfig, PreprocessResult, PreprocessingStepSummary } from './types';\nimport { coerceValuesByType } from './coerce-values-by-type';\n\ninterface PreprocessingStep {\n name: string;\n execute: (\n rows: any[],\n config: any,\n typePropertyMaps?: TypePropertyMaps,\n ) => {\n rows: any[];\n errors?: ProcessingIssues[];\n warnings?: ProcessingIssues[];\n generalErrors?: GeneralIssueDetails[];\n generalWarnings?: GeneralIssueDetails[];\n };\n}\n\n/**\n * Stage 2: Run the 6-step preprocessing pipeline on raw CSV rows.\n *\n * Pipeline order (V3 — transformations first, then type-aware operations):\n * 1. Apply Federated Mapping — rename columns so all downstream steps use canonical names\n * 2. Evaluate Conditional Columns — generate computed columns from expressions\n * 3. Remove Unwanted Properties — strip columns per config\n * 4. Trim Whitespace — strip leading/trailing whitespace from all string values\n * 5. Transform Data Based on Types — label→slug, display→value (runs once, with warnings)\n * 6. Coerce Values by Type — type-aware boolean, number, date coercion\n */\nexport async function preprocess(\n rows: Record<string, any>[],\n config: LoaderConfig,\n typePropertyMaps: TypePropertyMaps,\n): Promise<PreprocessResult> {\n const errors: ProcessingIssues[] = [];\n const warnings: ProcessingIssues[] = [];\n const generalErrors: GeneralIssueDetails[] = [];\n const generalWarnings: GeneralIssueDetails[] = [];\n const stepResults: PreprocessingStepSummary[] = [];\n\n if (!rows?.length) {\n return { rows: [], errors, warnings, generalErrors, generalWarnings, stepResults };\n }\n\n // If config has a top-level workspaceIdentifier, inject it as a synthetic\n // conditional column with a default value — same pattern as typePath defaults.\n // This puts the value onto every row so project-item processing can resolve per-row.\n const conditionalColumns = [...(config.conditionalColumns || [])];\n if (config.workspaceIdentifier) {\n conditionalColumns.push({\n toProperty: 'workspaceIdentifier',\n default: config.workspaceIdentifier,\n } as any);\n }\n\n const preprocessConfig = {\n federatedMappings: config.federatedMappings,\n conditionalColumns,\n propertiesToRemove: config.propertiesToRemove,\n };\n\n // Steps 1–4: standard preprocessing steps (each follows the StepResultOutput contract)\n const pipeline: PreprocessingStep[] = [\n { name: 'Apply Federated Mapping', execute: applyFederatedMappings },\n { name: 'Evaluate Conditional Columns', execute: applyConditionalColumns },\n { name: 'Remove Unwanted Properties', execute: removeUnwantedProperties },\n { name: 'Trim Whitespace', execute: trimValues },\n { name: 'Transform Data Based on Types', execute: transformDataBasedOnTypes },\n ];\n\n let processedData = rows;\n\n for (const step of pipeline) {\n try {\n const stepResult = step.execute(processedData, preprocessConfig, typePropertyMaps);\n processedData = stepResult.rows;\n\n stepResults.push({\n stepName: step.name,\n rowCountAfter: processedData.length,\n errorCount: stepResult.errors?.length || 0,\n warningCount: stepResult.warnings?.length || 0,\n });\n\n if (stepResult.errors?.length) {\n errors.push(...stepResult.errors);\n }\n if (stepResult.warnings?.length) {\n warnings.push(...stepResult.warnings);\n }\n if (stepResult.generalErrors?.length) {\n generalErrors.push(...stepResult.generalErrors);\n }\n if (stepResult.generalWarnings?.length) {\n generalWarnings.push(...stepResult.generalWarnings);\n }\n } catch (e) {\n const errorMessage = `Error in preprocessing step \"${step.name}\": ${e.message}`;\n console.error(errorMessage);\n generalErrors.push({\n message: errorMessage,\n issueType: IssueType.SYSTEM_ERROR,\n });\n break;\n }\n }\n\n // Step 5: Type-aware value coercion (separate interface — no config param)\n try {\n const coercionResult = coerceValuesByType(processedData, typePropertyMaps);\n processedData = coercionResult.rows;\n stepResults.push(coercionResult.summary);\n } catch (e) {\n const errorMessage = `Error in preprocessing step \"Coerce Values by Type\": ${e.message}`;\n console.error(errorMessage);\n generalErrors.push({\n message: errorMessage,\n issueType: IssueType.SYSTEM_ERROR,\n });\n }\n\n return {\n rows: processedData,\n errors,\n warnings,\n generalErrors,\n generalWarnings,\n stepResults,\n };\n}\n","import { TypePropertyMaps } from '../common/data-transformer-functions';\nimport { PreprocessingStepSummary } from './types';\n\n/**\n * Step 5: Coerce Values by Type\n *\n * Type-aware value coercion that only transforms values for columns mapped\n * to a known type property. Unmapped columns are left as raw CSV strings.\n *\n * Supported coercions:\n * - boolean: true/false, yes/no, y/n, 1/0 → true/false\n * - number/currency/percent/sequence: strip $, commas, quotes → Number()\n * - date: parse common formats (MM/DD/YYYY, DD-MMM-YYYY, etc.) → ISO string\n */\n\nconst BOOLEAN_TRUE = new Set(['true', 'yes', 'y', '1']);\nconst BOOLEAN_FALSE = new Set(['false', 'no', 'n', '0']);\n\nconst NUMERIC_TYPES = new Set(['number', 'currency', 'percent', 'sequence']);\n\nconst MONTH_NAMES: Record<string, number> = {\n jan: 0, january: 0,\n feb: 1, february: 1,\n mar: 2, march: 2,\n apr: 3, april: 3,\n may: 4,\n jun: 5, june: 5,\n jul: 6, july: 6,\n aug: 7, august: 7,\n sep: 8, september: 8,\n oct: 9, october: 9,\n nov: 10, november: 10,\n dec: 11, december: 11,\n};\n\nexport interface CoercionResult {\n rows: Record<string, any>[];\n summary: PreprocessingStepSummary;\n}\n\n/**\n * Coerce row values based on their mapped type property.\n * Only touches columns that resolve to a known type property slug.\n */\nexport function coerceValuesByType(\n rows: Record<string, any>[],\n typePropertyMaps: TypePropertyMaps,\n): CoercionResult {\n const { typePropertiesBySlug } = typePropertyMaps;\n const result = rows.map((row) => {\n const coerced = { ...row };\n for (const key of Object.keys(coerced)) {\n const property = resolveProperty(key, typePropertiesBySlug);\n if (!property) continue;\n\n const value = coerced[key];\n if (value === null || value === undefined) continue;\n\n const propertyType = property.propertyType;\n\n if (propertyType === 'boolean') {\n coerced[key] = coerceBoolean(value);\n } else if (NUMERIC_TYPES.has(propertyType)) {\n coerced[key] = coerceNumber(value);\n } else if (propertyType === 'date') {\n coerced[key] = coerceDate(value);\n }\n }\n return coerced;\n });\n\n return {\n rows: result,\n summary: {\n stepName: 'Coerce Values by Type',\n rowCountAfter: result.length,\n errorCount: 0,\n warningCount: 0,\n },\n };\n}\n\n/**\n * Resolve a CSV column key to a type property, handling Family/Option suffixes.\n */\nfunction resolveProperty(key: string, typePropertiesBySlug: Record<string, any>): any | null {\n const direct = typePropertiesBySlug[key];\n if (direct) return direct;\n\n // Try stripping Family/Option suffix\n if (key.endsWith('Family') || key.endsWith('Option')) {\n const base = key.replace(/(Family|Option)$/, '');\n return typePropertiesBySlug[base] || null;\n }\n\n return null;\n}\n\n// ---------------------------------------------------------------------------\n// Boolean coercion\n// ---------------------------------------------------------------------------\n\nfunction coerceBoolean(value: any): any {\n if (typeof value === 'boolean') return value;\n if (typeof value !== 'string') return value;\n\n const lower = value.toLowerCase().trim();\n if (lower === '') return value;\n if (BOOLEAN_TRUE.has(lower)) return true;\n if (BOOLEAN_FALSE.has(lower)) return false;\n\n // Unrecognized value — leave as-is for validation to catch\n return value;\n}\n\n// ---------------------------------------------------------------------------\n// Number coercion\n// ---------------------------------------------------------------------------\n\nfunction coerceNumber(value: any): any {\n if (typeof value === 'number') return value;\n if (typeof value !== 'string') return value;\n\n const trimmed = value.trim();\n if (trimmed === '') return value;\n\n // Strip $, commas, backslashes, quotes\n const cleaned = trimmed\n .replace(/[$,\\\\\"]/g, '')\n .trim();\n\n const parsed = Number(cleaned);\n if (!isNaN(parsed)) return parsed;\n\n // Couldn't parse — leave as-is\n return value;\n}\n\n// ---------------------------------------------------------------------------\n// Date coercion\n// ---------------------------------------------------------------------------\n\n/**\n * Attempt to parse common date formats into YYYY-MM-DD.\n * If the value is already ISO or can't be parsed, return as-is.\n */\nfunction coerceDate(value: any): any {\n if (value instanceof Date) return value;\n if (typeof value !== 'string') return value;\n\n const trimmed = value.trim();\n if (trimmed === '') return value;\n\n // Already ISO date (YYYY-MM-DD) or ISO datetime — leave as-is\n if (/^\\d{4}-\\d{2}-\\d{2}/.test(trimmed)) return value;\n\n // MM/DD/YYYY or M/D/YYYY\n const slashMatch = trimmed.match(/^(\\d{1,2})\\/(\\d{1,2})\\/(\\d{4})$/);\n if (slashMatch) {\n return formatISODate(parseInt(slashMatch[3]), parseInt(slashMatch[1]), parseInt(slashMatch[2]));\n }\n\n // MM-DD-YYYY or M-D-YYYY\n const dashMDYMatch = trimmed.match(/^(\\d{1,2})-(\\d{1,2})-(\\d{4})$/);\n if (dashMDYMatch) {\n return formatISODate(parseInt(dashMDYMatch[3]), parseInt(dashMDYMatch[1]), parseInt(dashMDYMatch[2]));\n }\n\n // DD-MMM-YYYY or DD MMM YYYY (e.g., 06-Mar-2026, 06 Mar 2026)\n const dMyMatch = trimmed.match(/^(\\d{1,2})[\\s-](\\w+)[\\s-](\\d{4})$/);\n if (dMyMatch) {\n const month = MONTH_NAMES[dMyMatch[2].toLowerCase()];\n if (month !== undefined) {\n return formatISODate(parseInt(dMyMatch[3]), month + 1, parseInt(dMyMatch[1]));\n }\n }\n\n // \"Month DD, YYYY\" (e.g., March 6, 2026)\n const longMatch = trimmed.match(/^(\\w+)\\s+(\\d{1,2}),?\\s+(\\d{4})$/);\n if (longMatch) {\n const month = MONTH_NAMES[longMatch[1].toLowerCase()];\n if (month !== undefined) {\n return formatISODate(parseInt(longMatch[3]), month + 1, parseInt(longMatch[2]));\n }\n }\n\n // Couldn't parse — leave as-is\n return value;\n}\n\nfunction formatISODate(year: number, month: number, day: number): string {\n return `${year}-${String(month).padStart(2, '0')}-${String(day).padStart(2, '0')}`;\n}\n","import { PropertyLevel } from '@contrail/types';\nimport { TypePropertyMaps, TypePropertyWithLookups } from '../common/data-transformer-functions';\nimport { EntityProcessorV2 } from '../entities-v2/entity-processor-v2';\nimport { getProcessorForEntityTypes } from '../processor-registry';\nimport { EntitiesLambdaCallType, retryOnTimeout, TypesByPath } from '../entities-v2/entities-helper';\nimport {\n LoaderConfig,\n ColumnAnalysisResult,\n EntitiesClient,\n PreValidationResult,\n PreValidationIssue,\n PreValidationCategory,\n PreValidationSeverity,\n AffectedRow,\n SuggestedFixType,\n LoadType,\n toLoaderProcessCompat,\n loadTypeToEntityTypes,\n} from './types';\n\n// Shorthand aliases for category enum values used across validation functions.\nconst CONFIG_CATEGORY = PreValidationCategory.CONFIG;\nconst MISSING_REQUIRED_FIELD_CATEGORY = PreValidationCategory.MISSING_REQUIRED_FIELD;\nconst REFERENCE_NOT_FOUND_CATEGORY = PreValidationCategory.REFERENCE_DATA_NOT_FOUND;\nconst FAMILY_INCONSISTENT_CATEGORY = PreValidationCategory.FAMILY_PROPERTY_VALUES_INCONSISTENT;\n\n/**\n * Stage 3: Validate preprocessed data.\n *\n * Runs all validations against the transformed data:\n * - Structural validation (missing federatedId, missing name, missing loadType)\n * - Entity-specific validations (per processor)\n * - Option set validation (values not in option set)\n * - Boolean format validation\n * - Multi-select format validation\n */\nexport async function validate(\n rows: Record<string, any>[],\n config: LoaderConfig,\n columnAnalysis: ColumnAnalysisResult,\n client?: EntitiesClient,\n): Promise<PreValidationResult> {\n const issues: PreValidationIssue[] = [];\n\n if (!rows?.length) {\n return buildResult(issues);\n }\n\n // 1. Run entity-specific processor validation if a processor exists.\n // Processor.validateLoadFile() internally calls EntityProcessorV2.validateLoadFile()\n // with the correct federated ID key for the entity type, so it covers structural\n // validation too. Only fall back to standalone structural validation when no\n // processor is available.\n const processorIssues = runProcessorValidation(rows, config);\n issues.push(...processorIssues);\n\n // 2b. Item-specific: validate name and optionName are not null/empty\n const itemNameIssues = validateItemNames(rows, config);\n issues.push(...itemNameIssues);\n\n // 2c. Project-item-specific: validate workspaceIdentifier/projectId column presence\n const projectItemColumnIssues = validateProjectItemColumns(rows, config);\n issues.push(...projectItemColumnIssues);\n\n // 2d. Project-item-specific: resolve workspace identifiers to project IDs.\n // This runs during validation so resolution failures surface early.\n // Resolved projectIds are set on the rows so preview/execute can reuse them.\n if (client && projectItemColumnIssues.length === 0) {\n const resolutionIssues = await validateAndResolveProjectIdentifiers(rows, config, client);\n issues.push(...resolutionIssues);\n }\n\n // 2e. Item-specific: validate that family-level properties are consistent across\n // all rows sharing the same itemFamilyFederatedId.\n const familyConsistencyIssues = validateFamilyPropertyConsistency(rows, config, columnAnalysis.typesByPath);\n issues.push(...familyConsistencyIssues);\n\n // 3. Run option set validation\n const optionSetIssues = validateOptionSets(rows, columnAnalysis.typePropertyMaps);\n issues.push(...optionSetIssues);\n\n // 4. Run boolean format validation\n const booleanIssues = validateBooleanFormats(rows, columnAnalysis.typePropertyMaps);\n issues.push(...booleanIssues);\n\n // 5. Run multi-select format validation\n const multiSelectIssues = validateMultiSelectFormats(rows, columnAnalysis.typePropertyMaps);\n issues.push(...multiSelectIssues);\n\n return buildResult(issues);\n}\n\n// ---------------------------------------------------------------------------\n// Structural validation — wraps existing EntityProcessorV2.validateLoadFile\n// ---------------------------------------------------------------------------\n\n/**\n * Determine the correct federatedId key based on load type.\n * ITEM / PROJECT_ITEM / ASSORTMENT loads use 'itemFamilyFederatedId'.\n * All other load types (COLOR, CUSTOM_ENTITY, etc.) use 'federatedId'.\n */\nfunction getFederatedIdKeyForLoadType(loadTypes: LoadType[]): string {\n const itemBasedLoadTypes = [LoadType.ITEM, LoadType.PROJECT_ITEM, LoadType.ASSORTMENT];\n const isItemBased = loadTypes.some((lt) => itemBasedLoadTypes.includes(lt));\n return isItemBased ? 'itemFamilyFederatedId' : 'federatedId';\n}\n\nfunction runStructuralValidation(rows: Record<string, any>[], config: LoaderConfig): PreValidationIssue[] {\n const loaderProcess = toLoaderProcessCompat(config);\n const federatedIdKey = getFederatedIdKeyForLoadType(config.loadType);\n const result = EntityProcessorV2.validateLoadFile(rows, loaderProcess, federatedIdKey);\n const issues: PreValidationIssue[] = [];\n\n // Convert generalErrors to PreValidationIssues\n for (const error of result.generalErrors ?? []) {\n issues.push({\n severity: PreValidationSeverity.ERROR,\n category: CONFIG_CATEGORY,\n columnName: '',\n propertySlug: '',\n propertyType: '',\n message: error.message,\n affectedRows: [],\n });\n }\n\n // Convert generalWarnings to PreValidationIssues\n for (const warning of result.generalWarnings ?? []) {\n issues.push({\n severity: PreValidationSeverity.WARNING,\n category: CONFIG_CATEGORY,\n columnName: '',\n propertySlug: '',\n propertyType: '',\n message: warning.message,\n affectedRows: [],\n });\n }\n\n return issues;\n}\n\n// ---------------------------------------------------------------------------\n// Processor-specific validation\n// ---------------------------------------------------------------------------\n\n/**\n * Run entity-specific processor validation.\n *\n * Processor.validateLoadFile() internally calls EntityProcessorV2.validateLoadFile()\n * with the correct federated ID key, so the returned issues include both structural\n * and entity-specific validations.\n *\n * Throws if no processor exists for the given load types — we should know what\n * we haven't covered rather than silently falling back.\n */\nfunction runProcessorValidation(rows: Record<string, any>[], config: LoaderConfig): PreValidationIssue[] {\n const entityTypes = loadTypeToEntityTypes(config.loadType);\n if (entityTypes.length === 0) {\n throw new Error(`No entity types mapped for load types: ${config.loadType.join(', ')}`);\n }\n\n const processor = getProcessorForEntityTypes(entityTypes);\n if (!processor?.validateLoadFile) {\n throw new Error(`Processor for entity types [${entityTypes.join(', ')}] does not implement validateLoadFile`);\n }\n\n const loaderProcess = toLoaderProcessCompat(config);\n const validationResult = processor.validateLoadFile(rows, loaderProcess);\n const issues: PreValidationIssue[] = [];\n\n // Convert generalErrors (from base EntityProcessorV2.validateLoadFile)\n for (const error of validationResult?.generalErrors ?? []) {\n issues.push({\n severity: PreValidationSeverity.ERROR,\n category: CONFIG_CATEGORY,\n columnName: '',\n propertySlug: '',\n propertyType: '',\n message: error.message,\n affectedRows: [],\n });\n }\n\n // Convert generalWarnings\n for (const warning of validationResult?.generalWarnings ?? []) {\n issues.push({\n severity: PreValidationSeverity.WARNING,\n category: CONFIG_CATEGORY,\n columnName: '',\n propertySlug: '',\n propertyType: '',\n message: warning.message,\n affectedRows: [],\n });\n }\n\n // Convert row-level errors\n for (const error of validationResult?.errors ?? []) {\n for (const colIssue of error.columnIssues ?? []) {\n issues.push({\n severity: PreValidationSeverity.ERROR,\n category: CONFIG_CATEGORY,\n columnName: colIssue.columnName,\n propertySlug: colIssue.columnName,\n propertyType: '',\n message: colIssue.message,\n affectedRows: [{ row: error.rowNumber, value: colIssue.data }],\n });\n }\n }\n\n // Convert row-level warnings\n for (const warning of validationResult?.warnings ?? []) {\n for (const colIssue of warning.columnIssues ?? []) {\n issues.push({\n severity: PreValidationSeverity.WARNING,\n category: CONFIG_CATEGORY,\n columnName: colIssue.columnName,\n propertySlug: colIssue.columnName,\n propertyType: '',\n message: colIssue.message,\n affectedRows: [{ row: warning.rowNumber, value: colIssue.data }],\n });\n }\n }\n\n return issues;\n}\n\n// ---------------------------------------------------------------------------\n// Option set validation\n// ---------------------------------------------------------------------------\n\nfunction validateOptionSets(rows: Record<string, any>[], typePropertyMaps: TypePropertyMaps): PreValidationIssue[] {\n const { optionSetUsingTypePropertiesBySlug } = typePropertyMaps;\n const issuesByColumn: Record<\n string,\n { property: TypePropertyWithLookups; missingValues: Map<string, AffectedRow[]> }\n > = {};\n\n rows.forEach((row, index) => {\n const rowNumber = index + 2; // +2 for 1-based + header row\n for (const [key, value] of Object.entries(row)) {\n if (value === null || value === undefined || value === '') continue;\n\n const property = optionSetUsingTypePropertiesBySlug[key];\n if (!property) continue;\n\n if (property.propertyType === 'choice') {\n const isValidByValue = property.optionLookupByValue?.[value as string];\n const isValidByDisplay = property.optionLookupByDisplay?.[value as string];\n if (!isValidByValue && !isValidByDisplay) {\n trackMissingValue(issuesByColumn, key, property, String(value), rowNumber);\n }\n } else if (property.propertyType === 'multi_select') {\n const values = String(value)\n .split(',')\n .map((v) => v.trim());\n for (const val of values) {\n if (!val) continue;\n const isValidByValue = property.optionLookupByValue?.[val];\n const isValidByDisplay = property.optionLookupByDisplay?.[val];\n if (!isValidByValue && !isValidByDisplay) {\n trackMissingValue(issuesByColumn, key, property, val, rowNumber);\n }\n }\n }\n }\n });\n\n // Convert to PreValidationIssues\n const issues: PreValidationIssue[] = [];\n for (const [columnName, data] of Object.entries(issuesByColumn)) {\n for (const [missingValue, affectedRows] of data.missingValues) {\n issues.push({\n severity: PreValidationSeverity.ERROR,\n category: PreValidationCategory.OPTION_SET,\n columnName,\n propertySlug: data.property.slug,\n propertyType: data.property.propertyType,\n message: `Value \"${missingValue}\" is not in the option set for property \"${columnName}\".`,\n affectedRows,\n suggestedFix: {\n type: SuggestedFixType.ADD_OPTION_SET_VALUES,\n details: {\n propertySlug: data.property.slug,\n missingValue,\n },\n },\n });\n }\n }\n\n return issues;\n}\n\nfunction trackMissingValue(\n tracker: Record<string, { property: TypePropertyWithLookups; missingValues: Map<string, AffectedRow[]> }>,\n columnName: string,\n property: TypePropertyWithLookups,\n value: string,\n rowNumber: number,\n) {\n if (!tracker[columnName]) {\n tracker[columnName] = { property, missingValues: new Map() };\n }\n const existing = tracker[columnName].missingValues.get(value) || [];\n existing.push({ row: rowNumber, value });\n tracker[columnName].missingValues.set(value, existing);\n}\n\n// ---------------------------------------------------------------------------\n// Boolean format validation\n// ---------------------------------------------------------------------------\n\nfunction validateBooleanFormats(rows: Record<string, any>[], typePropertyMaps: TypePropertyMaps): PreValidationIssue[] {\n const { typePropertiesBySlug } = typePropertyMaps;\n const issuesByColumn: Record<string, AffectedRow[]> = {};\n\n const validBooleanValues = new Set(['true', 'false', 'yes', 'no', '1', '0']);\n\n rows.forEach((row, index) => {\n const rowNumber = index + 2;\n for (const [key, value] of Object.entries(row)) {\n const property = typePropertiesBySlug[key];\n if (!property || property.propertyType !== 'boolean') continue;\n if (value === null || value === undefined || value === '' || typeof value === 'boolean') continue;\n\n const strVal = String(value).toLowerCase().trim();\n if (!validBooleanValues.has(strVal)) {\n if (!issuesByColumn[key]) issuesByColumn[key] = [];\n issuesByColumn[key].push({ row: rowNumber, value: String(value) });\n }\n }\n });\n\n return Object.entries(issuesByColumn).map(([columnName, affectedRows]) => ({\n severity: PreValidationSeverity.WARNING as PreValidationSeverity,\n category: PreValidationCategory.FORMAT_BOOLEAN,\n columnName,\n propertySlug: typePropertiesBySlug[columnName]?.slug ?? columnName,\n propertyType: 'boolean',\n message: `Column \"${columnName}\" contains non-standard boolean values.`,\n affectedRows,\n }));\n}\n\n// ---------------------------------------------------------------------------\n// Multi-select format validation\n// ---------------------------------------------------------------------------\n\nfunction validateMultiSelectFormats(\n rows: Record<string, any>[],\n typePropertyMaps: TypePropertyMaps,\n): PreValidationIssue[] {\n const { optionSetUsingTypePropertiesBySlug } = typePropertyMaps;\n const issues: PreValidationIssue[] = [];\n\n // Check for semicolons instead of commas as separator\n const semicolonColumns: Record<string, AffectedRow[]> = {};\n\n rows.forEach((row, index) => {\n const rowNumber = index + 2;\n for (const [key, value] of Object.entries(row)) {\n const property = optionSetUsingTypePropertiesBySlug[key];\n if (!property || property.propertyType !== 'multi_select') continue;\n if (value === null || value === undefined || value === '') continue;\n\n const strVal = String(value);\n // Heuristic: if value contains semicolons but no commas, it's likely using wrong separator\n if (strVal.includes(';') && !strVal.includes(',')) {\n if (!semicolonColumns[key]) semicolonColumns[key] = [];\n semicolonColumns[key].push({ row: rowNumber, value: strVal });\n }\n }\n });\n\n // TODO: ENGINE-23 Support other separators\n for (const [columnName, affectedRows] of Object.entries(semicolonColumns)) {\n const property = optionSetUsingTypePropertiesBySlug[columnName];\n issues.push({\n severity: PreValidationSeverity.WARNING,\n category: PreValidationCategory.FORMAT_MULTI_SELECT,\n columnName,\n propertySlug: property?.slug ?? columnName,\n propertyType: 'multi_select',\n message: `Column \"${columnName}\" appears to use semicolons instead of commas as a multi-select separator.`,\n affectedRows,\n suggestedFix: {\n type: SuggestedFixType.CHANGE_SEPARATOR,\n details: { from: ';', to: ',' },\n },\n });\n }\n\n return issues;\n}\n\n// ---------------------------------------------------------------------------\n// Item name validation\n// ---------------------------------------------------------------------------\n\n/**\n * For ITEM loads, validate that:\n * - `name` is not null/empty (always required for item families)\n * - `itemFamilyFederatedId` is not null/empty (always required)\n * - `optionName` and `itemOptionFederatedId` are either both present or both absent.\n * Both present = option row. Both absent = family-only row.\n * One present and one absent = validation error (they are required together).\n */\nfunction validateItemNames(rows: Record<string, any>[], config: LoaderConfig): PreValidationIssue[] {\n const itemBasedLoadTypes = [LoadType.ITEM, LoadType.PROJECT_ITEM, LoadType.ASSORTMENT];\n const isItemBased = config.loadType.some((lt) => itemBasedLoadTypes.includes(lt));\n if (!isItemBased) return [];\n\n const issues: PreValidationIssue[] = [];\n // Pre-processing should have ensured these columns exist if it's an item-based load\n const nameKey = 'name';\n const familyFedIdKey = 'itemFamilyFederatedId';\n const optionNameKey = 'optionName';\n const optionFedIdKey = 'itemOptionFederatedId';\n\n const emptyNameRows: AffectedRow[] = [];\n const emptyFamilyFedIdRows: AffectedRow[] = [];\n const optionFedIdWithoutNameRows: AffectedRow[] = [];\n const optionNameWithoutFedIdRows: AffectedRow[] = [];\n\n rows.forEach((row, index) => {\n const rowNumber = index + 2; // +2 for 1-based + header row\n\n // name is always required\n const nameVal = row[nameKey];\n if (nameVal === null || nameVal === undefined || nameVal === '') {\n emptyNameRows.push({ row: rowNumber, value: String(nameVal ?? '') });\n }\n\n // itemFamilyFederatedId is always required\n const familyFedIdVal = row[familyFedIdKey];\n if (familyFedIdVal === null || familyFedIdVal === undefined || familyFedIdVal === '') {\n emptyFamilyFedIdRows.push({ row: rowNumber, value: String(familyFedIdVal ?? '') });\n }\n\n // optionName and itemOptionFederatedId must be both present or both absent\n const hasOptionFedId =\n row[optionFedIdKey] !== null && row[optionFedIdKey] !== undefined && row[optionFedIdKey] !== '';\n const hasOptionName = row[optionNameKey] !== null && row[optionNameKey] !== undefined && row[optionNameKey] !== '';\n\n if (hasOptionFedId && !hasOptionName) {\n optionFedIdWithoutNameRows.push({ row: rowNumber, value: String(row[optionFedIdKey]) });\n } else if (hasOptionName && !hasOptionFedId) {\n optionNameWithoutFedIdRows.push({ row: rowNumber, value: String(row[optionNameKey]) });\n }\n });\n\n if (emptyNameRows.length > 0) {\n issues.push({\n severity: PreValidationSeverity.ERROR,\n category: MISSING_REQUIRED_FIELD_CATEGORY,\n columnName: nameKey,\n propertySlug: 'name',\n propertyType: 'string',\n message: `\"name\" cannot be empty for item families. ${emptyNameRows.length} row(s) have an empty name.`,\n affectedRows: emptyNameRows,\n });\n }\n\n if (emptyFamilyFedIdRows.length > 0) {\n issues.push({\n severity: PreValidationSeverity.ERROR,\n category: MISSING_REQUIRED_FIELD_CATEGORY,\n columnName: familyFedIdKey,\n propertySlug: 'itemFamilyFederatedId',\n propertyType: 'string',\n message: `\"itemFamilyFederatedId\" cannot be empty. ${emptyFamilyFedIdRows.length} row(s) have an empty itemFamilyFederatedId.`,\n affectedRows: emptyFamilyFedIdRows,\n });\n }\n\n if (optionFedIdWithoutNameRows.length > 0) {\n issues.push({\n severity: PreValidationSeverity.ERROR,\n category: MISSING_REQUIRED_FIELD_CATEGORY,\n columnName: optionNameKey,\n propertySlug: 'optionName',\n propertyType: 'string',\n message: `\"optionName\" is required when \"itemOptionFederatedId\" is provided. ${optionFedIdWithoutNameRows.length} row(s) have an itemOptionFederatedId but no optionName.`,\n affectedRows: optionFedIdWithoutNameRows,\n });\n }\n\n if (optionNameWithoutFedIdRows.length > 0) {\n issues.push({\n severity: PreValidationSeverity.ERROR,\n category: MISSING_REQUIRED_FIELD_CATEGORY,\n columnName: optionFedIdKey,\n propertySlug: 'itemOptionFederatedId',\n propertyType: 'string',\n message: `\"itemOptionFederatedId\" is required when \"optionName\" is provided. ${optionNameWithoutFedIdRows.length} row(s) have an optionName but no itemOptionFederatedId.`,\n affectedRows: optionNameWithoutFedIdRows,\n });\n }\n\n return issues;\n}\n\n// ---------------------------------------------------------------------------\n// Family property consistency validation\n// ---------------------------------------------------------------------------\n\n/**\n * For item-based loads, validate that family-level properties have consistent\n * values across all rows sharing the same `itemFamilyFederatedId`.\n *\n * When a family has multiple option rows, each row carries the family-level\n * property values. The loader takes the first row's value for each family\n * property, so conflicting values across rows indicate a data quality issue\n * that should be surfaced before execution.\n *\n * A property is considered family-level if its `propertyLevel` is:\n * - FAMILY, ALL, OVERRIDABLE, or undefined (no level = family by default)\n */\nfunction validateFamilyPropertyConsistency(\n rows: Record<string, any>[],\n config: LoaderConfig,\n typesByPath: TypesByPath,\n): PreValidationIssue[] {\n const itemBasedLoadTypes = [LoadType.ITEM, LoadType.PROJECT_ITEM, LoadType.ASSORTMENT];\n const isItemBased = config.loadType.some((lt) => itemBasedLoadTypes.includes(lt));\n if (!isItemBased) return [];\n\n // Determine which CSV columns are family-level properties from the type definitions,\n // tracking the property level for each so error messages can vary.\n const familyPropertyLevels: Record<string, PropertyLevel | 'family-default'> = {};\n for (const typePath of Object.keys(typesByPath)) {\n const typeObj = typesByPath[typePath];\n if (!typeObj?.type?.typeProperties) continue;\n\n for (const prop of typeObj.type.typeProperties) {\n if (isFamilyLevelProperty(prop.propertyLevel)) {\n const level = prop.propertyLevel || 'family-default';\n familyPropertyLevels[prop.slug] = level as PropertyLevel | 'family-default';\n // Also add the \"Family\" suffixed variant for overridable properties\n if (prop.propertyLevel === PropertyLevel.OVERRIDABLE) {\n familyPropertyLevels[prop.slug + 'Family'] = PropertyLevel.FAMILY;\n }\n }\n }\n }\n\n const familyPropertySlugs = new Set(Object.keys(familyPropertyLevels));\n if (familyPropertySlugs.size === 0) return [];\n\n // Group rows by itemFamilyFederatedId\n const familyGroups: Record<string, { rows: Record<string, any>[]; rowNumbers: number[] }> = {};\n rows.forEach((row, index) => {\n const famId = row.itemFamilyFederatedId;\n if (!famId) return;\n if (!familyGroups[famId]) {\n familyGroups[famId] = { rows: [], rowNumbers: [] };\n }\n familyGroups[famId].rows.push(row);\n familyGroups[famId].rowNumbers.push(index + 2); // +2 for 1-based + header row\n });\n\n // For each family group with multiple rows, check consistency of family properties\n const issues: PreValidationIssue[] = [];\n // Track issues by property slug so we can aggregate across families\n const inconsistenciesBySlug: Record<string, {\n families: Array<{ familyId: string; values: Set<string>; rowNumbers: number[] }>;\n }> = {};\n\n for (const [famId, group] of Object.entries(familyGroups)) {\n if (group.rows.length <= 1) continue; // Single row — no conflict possible\n\n for (const slug of familyPropertySlugs) {\n // Collect distinct values for this property across all rows in the family\n const valuesWithRows: Map<string, number[]> = new Map();\n for (let i = 0; i < group.rows.length; i++) {\n const row = group.rows[i];\n if (!(slug in row)) continue; // Column not present on this row\n const val = String(row[slug] ?? '');\n const existing = valuesWithRows.get(val) || [];\n existing.push(group.rowNumbers[i]);\n valuesWithRows.set(val, existing);\n }\n\n if (valuesWithRows.size <= 1) continue; // All rows agree (or column not present)\n\n if (!inconsistenciesBySlug[slug]) {\n inconsistenciesBySlug[slug] = { families: [] };\n }\n inconsistenciesBySlug[slug].families.push({\n familyId: famId,\n values: new Set(valuesWithRows.keys()),\n rowNumbers: group.rowNumbers,\n });\n }\n }\n\n // Build issues — one per property slug, with message tailored to property level\n for (const [slug, data] of Object.entries(inconsistenciesBySlug)) {\n const affectedRows: AffectedRow[] = [];\n const familyDetails: string[] = [];\n\n for (const family of data.families) {\n const valuesStr = Array.from(family.values).map((v) => `\"${v}\"`).join(', ');\n familyDetails.push(`family \"${family.familyId}\" has values: ${valuesStr}`);\n for (const rowNum of family.rowNumbers) {\n affectedRows.push({ row: rowNum, value: slug });\n }\n }\n\n const level = familyPropertyLevels[slug];\n let message: string;\n\n if (level === PropertyLevel.FAMILY || level === 'family-default') {\n message = `Family-level property \"${slug}\" has inconsistent values across rows for the same family. All rows sharing an itemFamilyFederatedId must have the same value for family properties. ${familyDetails.join('; ')}.`;\n } else if (level === PropertyLevel.ALL) {\n message = `All-level property \"${slug}\" has inconsistent values across rows for the same family. Without a \"Family\"/\"Option\" suffix, this column applies the same value to both family and option — so all rows for the same itemFamilyFederatedId must agree. If you need different values per option, split this into \"${slug}Family\" and \"${slug}Option\" columns. ${familyDetails.join('; ')}.`;\n } else if (level === PropertyLevel.OVERRIDABLE) {\n message = `Override-level property \"${slug}\" has inconsistent values across rows for the same family. Without a \"Family\"/\"Option\" suffix, this column applies the same value to both family and option — so all rows for the same itemFamilyFederatedId must agree. If you need different values per option, split this into \"${slug}Family\" and \"${slug}Option\" columns. ${familyDetails.join('; ')}.`;\n } else {\n message = `Property \"${slug}\" has inconsistent values across rows for the same family. All rows sharing an itemFamilyFederatedId must have the same value. ${familyDetails.join('; ')}.`;\n }\n\n issues.push({\n severity: PreValidationSeverity.ERROR,\n category: FAMILY_INCONSISTENT_CATEGORY,\n columnName: slug,\n propertySlug: slug,\n propertyType: '',\n message,\n affectedRows,\n });\n }\n\n return issues;\n}\n\nfunction isFamilyLevelProperty(propertyLevel: PropertyLevel | string | undefined | null): boolean {\n if (!propertyLevel) return true; // No level = family by default\n return [\n PropertyLevel.FAMILY,\n PropertyLevel.ALL,\n PropertyLevel.OVERRIDABLE,\n ].includes(propertyLevel as PropertyLevel);\n}\n\n// ---------------------------------------------------------------------------\n// Project identifier resolution (validation-time)\n// ---------------------------------------------------------------------------\n\n/**\n * For PROJECT_ITEM loads, validate that project identifiers resolve to real projects.\n *\n * - `workspaceIdentifier` column: resolve each unique identifier to a projectId via the API.\n * On success, sets `projectId` on each row and deletes `workspaceIdentifier`.\n * - `projectId` column: verify each unique project ID exists via the API.\n *\n * This runs during validation so resolution/existence failures surface before preview/execute.\n */\nasync function validateAndResolveProjectIdentifiers(\n rows: Record<string, any>[],\n config: LoaderConfig,\n client: EntitiesClient,\n): Promise<PreValidationIssue[]> {\n const isProjectItemLoad = config.loadType.some((lt) => lt === LoadType.PROJECT_ITEM);\n if (!isProjectItemLoad) return [];\n\n const hasWorkspaceIdentifier = rows.some((row) => row.workspaceIdentifier);\n\n if (hasWorkspaceIdentifier) {\n return validateWorkspaceIdentifiers(rows, client);\n }\n\n // projectId column — validate the IDs exist\n return validateProjectIds(rows, client);\n}\n\nasync function validateWorkspaceIdentifiers(\n rows: Record<string, any>[],\n client: EntitiesClient,\n): Promise<PreValidationIssue[]> {\n const issues: PreValidationIssue[] = [];\n const cache: Record<string, string | null> = {};\n\n const uniqueIdentifiers = new Set<string>();\n for (const row of rows) {\n if (row.workspaceIdentifier) uniqueIdentifiers.add(row.workspaceIdentifier);\n }\n\n for (const wsIdentifier of uniqueIdentifiers) {\n try {\n const projectId = await resolveProjectIdFromWorkspace(client, wsIdentifier);\n cache[wsIdentifier] = projectId;\n\n if (!projectId) {\n const affectedRows: AffectedRow[] = [];\n rows.forEach((row, index) => {\n if (row.workspaceIdentifier === wsIdentifier) {\n affectedRows.push({ row: index + 2, value: wsIdentifier });\n }\n });\n\n issues.push({\n severity: PreValidationSeverity.ERROR,\n category: REFERENCE_NOT_FOUND_CATEGORY,\n columnName: 'workspaceIdentifier',\n propertySlug: 'workspaceIdentifier',\n propertyType: 'string',\n message: `Could not resolve workspace identifier \"${wsIdentifier}\" to a project. Verify the workspace exists and is a PROJECT type workspace.`,\n affectedRows,\n });\n }\n } catch (e) {\n issues.push({\n severity: PreValidationSeverity.ERROR,\n category: REFERENCE_NOT_FOUND_CATEGORY,\n columnName: 'workspaceIdentifier',\n propertySlug: 'workspaceIdentifier',\n propertyType: 'string',\n message: `Failed to resolve workspace identifier \"${wsIdentifier}\": ${e.message}`,\n affectedRows: [],\n });\n }\n }\n\n // If all resolved successfully, set projectId on rows and clean up workspaceIdentifier\n if (issues.length === 0) {\n for (const row of rows) {\n if (row.workspaceIdentifier) {\n row.projectId = cache[row.workspaceIdentifier];\n delete row.workspaceIdentifier;\n }\n }\n }\n\n return issues;\n}\n\nasync function validateProjectIds(\n rows: Record<string, any>[],\n client: EntitiesClient,\n): Promise<PreValidationIssue[]> {\n const issues: PreValidationIssue[] = [];\n\n const uniqueProjectIds = new Set<string>();\n for (const row of rows) {\n if (row.projectId) uniqueProjectIds.add(row.projectId);\n }\n\n if (uniqueProjectIds.size === 0) return [];\n\n for (const projectId of uniqueProjectIds) {\n try {\n const project = await retryOnTimeout(client, EntitiesLambdaCallType.GET, {\n entityName: 'project',\n id: projectId,\n skipHydrateRelationships: true,\n });\n\n if (!project) {\n const affectedRows: AffectedRow[] = [];\n rows.forEach((row, index) => {\n if (row.projectId === projectId) {\n affectedRows.push({ row: index + 2, value: projectId });\n }\n });\n\n issues.push({\n severity: PreValidationSeverity.ERROR,\n category: REFERENCE_NOT_FOUND_CATEGORY,\n columnName: 'projectId',\n propertySlug: 'projectId',\n propertyType: 'string',\n message: `Project \"${projectId}\" not found. Verify the project ID is correct and the project exists.`,\n affectedRows,\n });\n }\n } catch (e) {\n const affectedRows: AffectedRow[] = [];\n rows.forEach((row, index) => {\n if (row.projectId === projectId) {\n affectedRows.push({ row: index + 2, value: projectId });\n }\n });\n\n issues.push({\n severity: PreValidationSeverity.ERROR,\n category: REFERENCE_NOT_FOUND_CATEGORY,\n columnName: 'projectId',\n propertySlug: 'projectId',\n propertyType: 'string',\n message: `Failed to validate project \"${projectId}\": ${e.message}`,\n affectedRows,\n });\n }\n }\n\n return issues;\n}\n\n/**\n * Resolve a workspace identifier to a project ID.\n */\nasync function resolveProjectIdFromWorkspace(\n client: EntitiesClient,\n workspaceIdentifier: string,\n): Promise<string | null> {\n const workspaces = await retryOnTimeout(client, EntitiesLambdaCallType.GET, {\n entityName: 'workspace',\n criteria: {\n identifier: workspaceIdentifier,\n workspaceType: 'PROJECT',\n },\n skipHydrateRelationships: true,\n });\n\n if (!workspaces?.length) return null;\n\n const workspaceId = workspaces[0]?.id;\n if (!workspaceId) return null;\n\n const workspace = await retryOnTimeout(client, EntitiesLambdaCallType.GET, {\n entityName: 'workspace',\n id: workspaceId,\n relations: ['project'],\n skipHydrateRelationships: true,\n });\n\n return workspace?.project?.id || null;\n}\n\n// ---------------------------------------------------------------------------\n// Project-item column validation\n// ---------------------------------------------------------------------------\n\n/**\n * For PROJECT_ITEM loads, validate that:\n * - Rows have either a `workspaceIdentifier` or `projectId` column (not neither)\n * - Rows do not have both columns (mutually exclusive)\n * - The chosen column has non-empty values\n */\nfunction validateProjectItemColumns(rows: Record<string, any>[], config: LoaderConfig): PreValidationIssue[] {\n const isProjectItemLoad = config.loadType.some((lt) => lt === LoadType.PROJECT_ITEM);\n if (!isProjectItemLoad) return [];\n\n const issues: PreValidationIssue[] = [];\n\n const hasWorkspaceIdentifier = rows.some((row) => row.workspaceIdentifier !== undefined);\n const hasProjectId = rows.some((row) => row.projectId !== undefined);\n\n if (hasWorkspaceIdentifier && hasProjectId) {\n issues.push({\n severity: PreValidationSeverity.ERROR,\n category: CONFIG_CATEGORY,\n columnName: 'workspaceIdentifier / projectId',\n propertySlug: '',\n propertyType: '',\n message: 'Rows contain both \"workspaceIdentifier\" and \"projectId\" columns. Use one or the other to identify the target project.',\n affectedRows: [],\n });\n return issues;\n }\n\n if (!hasWorkspaceIdentifier && !hasProjectId) {\n issues.push({\n severity: PreValidationSeverity.ERROR,\n category: CONFIG_CATEGORY,\n columnName: 'workspaceIdentifier / projectId',\n propertySlug: '',\n propertyType: '',\n message: 'PROJECT_ITEM loads require a \"workspaceIdentifier\" or \"projectId\" column (or a config-level workspaceIdentifier) to identify the target project.',\n affectedRows: [],\n });\n return issues;\n }\n\n // Validate non-empty values\n const columnName = hasWorkspaceIdentifier ? 'workspaceIdentifier' : 'projectId';\n const emptyRows: AffectedRow[] = [];\n rows.forEach((row, index) => {\n const val = row[columnName];\n if (val === null || val === undefined || val === '') {\n emptyRows.push({ row: index + 2, value: '' });\n }\n });\n\n if (emptyRows.length > 0) {\n issues.push({\n severity: PreValidationSeverity.ERROR,\n category: MISSING_REQUIRED_FIELD_CATEGORY,\n columnName,\n propertySlug: columnName,\n propertyType: 'string',\n message: `\"${columnName}\" cannot be empty for project-item rows. ${emptyRows.length} row(s) have an empty value.`,\n affectedRows: emptyRows,\n });\n }\n\n return issues;\n}\n\n// ---------------------------------------------------------------------------\n// Result builder\n// ---------------------------------------------------------------------------\n\nfunction buildResult(issues: PreValidationIssue[]): PreValidationResult {\n let errorCount = 0;\n let warningCount = 0;\n let infoCount = 0;\n const countsByCategory: Partial<Record<PreValidationCategory, number>> = {};\n\n for (const issue of issues) {\n if (issue.severity === PreValidationSeverity.ERROR) errorCount++;\n else if (issue.severity === PreValidationSeverity.WARNING) warningCount++;\n else infoCount++;\n\n countsByCategory[issue.category] = (countsByCategory[issue.category] || 0) + 1;\n }\n\n return {\n valid: errorCount === 0,\n issues,\n summary: {\n errorCount,\n warningCount,\n infoCount,\n countsByCategory,\n },\n };\n}\n","import { EntitiesClient, EntityType } from '@contrail/entity-types';\nimport { EntityProcessorV2 } from '../entities-v2/entity-processor-v2';\nimport { UpdateNeeded } from '../entities-v2/entities-helper';\nimport {\n LoaderConfig,\n ColumnAnalysisResult,\n PreviewResult,\n EntityPreviewSummary,\n SkippedRow,\n ConstructedEntitySet,\n toLoaderProcessCompat,\n loadTypeToEntityTypes,\n} from './types';\nimport { previewItemEntities } from './item-execute-helpers';\nimport { previewProjectItemEntities } from './project-item-execute-helpers';\n\n/**\n * Stage 4: Preview what the load will do.\n *\n * For each entity type in the load, constructs incoming entities from the\n * preprocessed data, fetches existing entities by federatedId, and classifies\n * each row as create/update/unchanged/stale/bad — all without persisting.\n */\nexport async function preview(\n client: EntitiesClient,\n rows: Record<string, any>[],\n config: LoaderConfig,\n columnAnalysis: ColumnAnalysisResult,\n): Promise<PreviewResult> {\n const entityTypes = loadTypeToEntityTypes(config.loadType);\n const loaderProcess = toLoaderProcessCompat(config);\n const allWarnings: string[] = [];\n const allBadRows: SkippedRow[] = [];\n const allStaleRows: SkippedRow[] = [];\n const entities: EntityPreviewSummary[] = [];\n const constructedEntities: Record<string, ConstructedEntitySet> = {};\n\n for (const entityType of entityTypes) {\n // Use the existing EntityProcessorV2.setupEntities to do entity construction,\n // type resolution, object reference resolution, and current-entity fetch.\n const doConstructEntities = entityType !== EntityType.ASSORTMENT;\n\n // Note: ProcessedEntityV2 types are loosely declared (string[] for entities/typesByPath)\n // but at runtime contain objects. We cast to any to work around the type inaccuracies.\n // Shallow-clone rows to avoid mutating the caller's data\n // (setupEntities/transformData can mutate row objects)\n const clonedRows = rows.map(row => ({ ...row }));\n const result: any = await EntityProcessorV2.setupEntities(\n client,\n entityType,\n clonedRows,\n undefined, // entitySpecificProperties\n loaderProcess,\n {}, // itemsByFederatedId\n doConstructEntities,\n columnAnalysis.typesByPath ? buildTypesByTypePathCache(columnAnalysis) : undefined,\n );\n\n // Collect warnings from object reference resolution\n if (result.generalWarnings?.length) {\n for (const warning of result.generalWarnings) {\n allWarnings.push(warning.message);\n }\n }\n\n // Collect bad rows\n if (result.badEntities?.length) {\n for (let i = 0; i < result.badEntities.length; i++) {\n const badEntity = result.badEntities[i];\n allBadRows.push({\n rowNumber: findRowNumber(badEntity, rows),\n federatedId: badEntity?.federatedId,\n reason: 'Failed entity construction (invalid row, missing typePath, or missing required properties)',\n });\n }\n }\n\n // Classify incoming entities\n const incoming = result.incomingEntities || [];\n const currentByFedId = result.allCurrentEntitiesByFederatedId || {};\n\n // For PROJECT_ITEM loads, use the dedicated preview that checks existence\n // by composite key (projectId + itemId) rather than by federated ID.\n if (entityType === EntityType.PROJECT_ITEM) {\n const entitySetForPreview: ConstructedEntitySet = {\n incomingEntities: incoming,\n badEntities: result.badEntities || [],\n allCurrentEntitiesByFederatedId: currentByFedId,\n typesByPath: result.typesByPath || {},\n projectId: result.projectId,\n generalWarnings: result.generalWarnings,\n };\n\n const projectItemPreview = await previewProjectItemEntities(\n client,\n entitySetForPreview,\n config,\n );\n\n entities.push(...projectItemPreview.summaries);\n allBadRows.push(...projectItemPreview.badRows);\n allStaleRows.push(...projectItemPreview.staleRows);\n allWarnings.push(...projectItemPreview.warnings);\n\n constructedEntities[entityType] = entitySetForPreview;\n } else if (entityType === EntityType.ITEM) {\n const itemPreview = previewItemEntities(\n incoming,\n currentByFedId,\n result.typesByPath || {},\n config,\n );\n\n entities.push(...itemPreview.summaries);\n allBadRows.push(...itemPreview.badRows);\n allStaleRows.push(...itemPreview.staleRows);\n allWarnings.push(...itemPreview.warnings);\n\n // Store the full entity set for execute stage reuse\n constructedEntities[entityType] = {\n incomingEntities: incoming,\n badEntities: result.badEntities || [],\n allCurrentEntitiesByFederatedId: currentByFedId,\n typesByPath: result.typesByPath || {},\n projectId: result.projectId,\n generalWarnings: result.generalWarnings,\n };\n } else {\n const classification = classifyEntities(\n incoming,\n currentByFedId,\n config.skipStaleUpdatesUsing,\n );\n\n // Collect stale rows\n for (const staleInfo of classification.stale) {\n allStaleRows.push({\n rowNumber: findRowNumber(staleInfo.entity, rows),\n federatedId: staleInfo.entity?.federatedId,\n reason: 'Skipped: incoming timestamp is older than existing',\n details: {\n incomingTimestamp: staleInfo.incomingTimestamp,\n existingTimestamp: staleInfo.existingTimestamp,\n },\n });\n }\n\n entities.push({\n entityType,\n total: incoming.length,\n creates: classification.toCreate.length,\n updates: classification.toUpdate.length,\n drops: 0, // Drops are assortment-specific, computed separately if needed\n unchanged: classification.unchanged.length,\n skippedStale: classification.stale.length,\n });\n\n // Store constructed entities for use by execute stage\n constructedEntities[entityType] = {\n incomingEntities: incoming,\n badEntities: result.badEntities || [],\n allCurrentEntitiesByFederatedId: currentByFedId,\n typesByPath: result.typesByPath || {},\n projectId: result.projectId,\n generalWarnings: result.generalWarnings,\n };\n }\n }\n\n return {\n entities,\n badRows: allBadRows,\n staleRows: allStaleRows,\n warnings: allWarnings,\n constructedEntities,\n };\n}\n\n// ---------------------------------------------------------------------------\n// Entity classification\n// ---------------------------------------------------------------------------\n\ninterface ClassifiedEntities {\n toCreate: any[];\n toUpdate: any[];\n unchanged: any[];\n stale: Array<{ entity: any; incomingTimestamp: string; existingTimestamp: string }>;\n}\n\nfunction classifyEntities(\n incomingEntities: any[],\n currentByFedId: Record<string, any>,\n skipStaleUpdatesUsing?: string,\n): ClassifiedEntities {\n const toCreate: any[] = [];\n const toUpdate: any[] = [];\n const unchanged: any[] = [];\n const stale: Array<{ entity: any; incomingTimestamp: string; existingTimestamp: string }> = [];\n\n for (const incoming of incomingEntities) {\n const fedId = incoming.federatedId;\n const existing = fedId ? currentByFedId[fedId] : undefined;\n\n if (!existing) {\n // New entity — needs to be created\n toCreate.push(incoming);\n continue;\n }\n\n // Check for stale updates\n if (skipStaleUpdatesUsing) {\n const incomingTs = incoming[skipStaleUpdatesUsing];\n const existingTs = existing[skipStaleUpdatesUsing];\n\n if (incomingTs && existingTs && new Date(incomingTs) < new Date(existingTs)) {\n stale.push({\n entity: incoming,\n incomingTimestamp: String(incomingTs),\n existingTimestamp: String(existingTs),\n });\n continue;\n }\n }\n\n // Check if update is actually needed\n if (UpdateNeeded(incoming, existing)) {\n toUpdate.push(incoming);\n } else {\n unchanged.push(incoming);\n }\n }\n\n return { toCreate, toUpdate, unchanged, stale };\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\n/**\n * Build a typePath → Type cache from the column analysis result.\n * This allows setupEntities to skip redundant type fetches.\n */\nfunction buildTypesByTypePathCache(\n columnAnalysis: ColumnAnalysisResult,\n): Record<string, any> | undefined {\n const cache: Record<string, any> = {};\n let hasEntries = false;\n\n for (const [path, typeInfo] of Object.entries(columnAnalysis.typesByPath || {})) {\n if (typeInfo?.type) {\n cache[path] = typeInfo.type;\n hasEntries = true;\n }\n }\n\n return hasEntries ? cache : undefined;\n}\n\n/**\n * Try to find the original row number for a bad/stale entity.\n * Falls back to -1 if not found.\n */\nfunction findRowNumber(entity: any, originalRows: Record<string, any>[]): number {\n if (!entity) return -1;\n\n const fedId = entity.federatedId;\n if (fedId) {\n for (let i = 0; i < originalRows.length; i++) {\n if (originalRows[i].federatedId === fedId) {\n return i + 2; // +2 for 1-based + header row\n }\n }\n }\n\n return -1;\n}\n","import { EntityType, EntitiesClient } from '@contrail/entity-types';\nimport { ObjectUtil } from '@contrail/util';\nimport { chunk } from 'lodash';\nimport { TypesByPath } from '../common/entities-helper';\nimport {\n EntitiesLambdaCallType,\n retryOnTimeout,\n UpdateNeeded,\n compareIncomingAndExisting,\n} from '../entities-v2/entities-helper';\nimport { reduceToFamilyProperties, setOptionOverrides, removeFamilyLevelPropsFromOption } from '../common/type-helper';\nimport {\n LoaderConfig,\n EntityExecutionSummary,\n EntityFailure,\n SkippedRow,\n ExecuteOptions,\n ConstructedEntitySet,\n EntityPreviewSummary,\n} from './types';\n\nconst pLimit = require('p-limit');\n\nconst DEFAULT_BATCH_SIZE = 50;\nconst DEFAULT_CONCURRENCY = 20;\nconst DEFAULT_MAX_RETRIES = 3;\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport interface ItemExecutionResult {\n summaries: EntityExecutionSummary[];\n skippedRows: SkippedRow[];\n warnings: string[];\n hasFailures: boolean;\n}\n\nexport interface ItemPreviewResult {\n summaries: EntityPreviewSummary[];\n badRows: SkippedRow[];\n staleRows: SkippedRow[];\n warnings: string[];\n /** Pass through for execute stage reuse */\n constructedFamilies: { toCreate: any[]; toUpdate: any[]; unchanged: any[]; currentByFedId: Record<string, any> };\n constructedOptions: { toCreate: any[]; toUpdate: any[]; unchanged: any[]; skippedUpstream: SkippedRow[] };\n}\n\n// ---------------------------------------------------------------------------\n// API error extraction\n// ---------------------------------------------------------------------------\n\n/**\n * Extract a human-readable error message from a batch API error response.\n * The V2 API returns validation errors in:\n * err.error.response.validationSummary.validationErrors\n * Falls back to err.error.message.\n */\nexport function extractApiErrorMessage(err: any): string {\n const validationErrors = err?.error?.response?.validationSummary?.validationErrors;\n if (validationErrors && typeof validationErrors === 'object') {\n const messages: string[] = [];\n for (const [field, errors] of Object.entries(validationErrors)) {\n if (Array.isArray(errors)) {\n for (const e of errors as any[]) {\n messages.push(`${field}: ${e.message || JSON.stringify(e)}`);\n }\n }\n }\n if (messages.length > 0) return messages.join('; ');\n }\n return err?.error?.message ?? err?.error?.response?.message ?? String(err?.error);\n}\n\n/**\n * Extract the entity identifier from a batch API error.\n * For V2 updates the entity is `{ id, changes }` — try to get federatedId from the\n * response object, or fall back to the entity id.\n */\nexport function extractFailureId(err: any): string {\n return (\n err?.data?.federatedId ??\n err?.entity?.federatedId ??\n err?.error?.response?.obj?.federatedId ??\n err?.entity?.id ??\n 'unknown'\n );\n}\n\n// ---------------------------------------------------------------------------\n// Diff-only update payload builder\n// ---------------------------------------------------------------------------\n\n/**\n * Build a minimal update payload containing only changed properties.\n * Compares incoming entity against the existing entity using the same\n * diff logic used in preview (compareIncomingAndExisting), then returns\n * an object with only `id` and the changed properties.\n */\nexport function buildDiffUpdatePayload(incoming: any, existing: any): any {\n const diffs = compareIncomingAndExisting(incoming, existing);\n const changes: any = {};\n\n for (const diff of diffs) {\n // diff.propertyName can be a dotted path for nested props — use the top-level key\n const topKey = diff.propertyName.split('.')[0];\n if (topKey && incoming[topKey] !== undefined) {\n changes[topKey] = incoming[topKey];\n }\n }\n\n return {\n id: existing.id,\n changes,\n };\n}\n\n// ---------------------------------------------------------------------------\n// Family / option splitting\n// ---------------------------------------------------------------------------\n\nexport interface SplitItems {\n /** One family entity per unique itemFamilyFederatedId */\n families: any[];\n /** One option entity per row that has an itemOptionFederatedId */\n options: any[];\n /** Maps option federatedId → family federatedId for linking after family creation */\n optionToFamilyMap: Map<string, string>;\n}\n\n/**\n * Split constructed incoming entities into family and option entities,\n * applying the correct property-level filtering for each.\n *\n * Follows the V2 pattern from contrail-api's ItemLoaderV2:\n * - Family: reduceToFamilyProperties, delete option-only keys, set federatedId = itemFamilyFederatedId\n * - Option: setOptionOverrides + removeFamilyLevelPropsFromOption, set federatedId = itemOptionFederatedId\n */\nexport function splitIntoFamiliesAndOptions(incomingEntities: any[], typesByPath: TypesByPath): SplitItems {\n // Group rows by itemFamilyFederatedId\n const byFamilyId: Record<string, any[]> = {};\n for (const entity of incomingEntities) {\n const famFedId = entity.itemFamilyFederatedId;\n if (!famFedId) continue;\n if (!byFamilyId[famFedId]) byFamilyId[famFedId] = [];\n byFamilyId[famFedId].push(entity);\n }\n\n const families: any[] = [];\n const options: any[] = [];\n const optionToFamilyMap = new Map<string, string>();\n\n for (const [famFedId, rows] of Object.entries(byFamilyId)) {\n // Pick the family representative: prefer a row without itemOptionFederatedId, else first row\n const familyRow = rows.find((r) => !r.itemOptionFederatedId) || rows[0];\n const typePath = familyRow.typePath || EntityType.ITEM;\n const typeInfo = typesByPath[typePath];\n const type = typeInfo?.type;\n\n // Build family entity\n const familyClone = ObjectUtil.cloneDeep(familyRow);\n const familyEntity = type ? reduceToFamilyProperties(familyClone, type) : { ...familyClone };\n familyEntity.federatedId = famFedId;\n delete familyEntity.optionGroup;\n delete familyEntity.optionName;\n delete familyEntity.itemFamilyFederatedId;\n delete familyEntity.itemOptionFederatedId;\n families.push(familyEntity);\n\n // Build option entities\n for (const row of rows) {\n if (!row.itemOptionFederatedId) continue;\n const optionFedId = row.itemOptionFederatedId;\n const optClone = ObjectUtil.cloneDeep(row);\n optClone.federatedId = optionFedId;\n optionToFamilyMap.set(optionFedId, optClone.itemFamilyFederatedId);\n delete optClone.itemFamilyFederatedId;\n delete optClone.itemOptionFederatedId;\n\n if (type) {\n setOptionOverrides(optClone, { typeProperties: type.typeProperties });\n removeFamilyLevelPropsFromOption(optClone, type);\n }\n options.push(optClone);\n }\n }\n\n return { families, options, optionToFamilyMap };\n}\n\n// ---------------------------------------------------------------------------\n// Preview: classify families and options separately\n// ---------------------------------------------------------------------------\n\nexport function previewItemEntities(\n incomingEntities: any[],\n currentByFedId: Record<string, any>,\n typesByPath: TypesByPath,\n config: LoaderConfig,\n): ItemPreviewResult {\n const { families, options, optionToFamilyMap } = splitIntoFamiliesAndOptions(incomingEntities, typesByPath);\n const warnings: string[] = [];\n const badRows: SkippedRow[] = [];\n const staleRows: SkippedRow[] = [];\n\n // Classify families\n const familyClassification = classifyEntities(families, currentByFedId, config.skipStaleUpdatesUsing);\n\n // For options, we need to check family existence\n const skippedUpstream: SkippedRow[] = [];\n const viableOptions: any[] = [];\n\n // Build a set of family federated IDs that will exist after family creates\n const familyFedIds = new Set<string>();\n for (const fam of families) {\n familyFedIds.add(fam.federatedId);\n }\n\n for (const opt of options) {\n const famFedId = optionToFamilyMap.get(opt.federatedId);\n // Family either already exists or is being created\n const familyExists = currentByFedId[famFedId] || familyFedIds.has(famFedId);\n if (!familyExists) {\n skippedUpstream.push({\n rowNumber: -1,\n federatedId: opt.federatedId,\n reason: `Family (${famFedId}) not found for option (${opt.federatedId})`,\n });\n continue;\n }\n viableOptions.push(opt);\n }\n\n const optionClassification = classifyEntities(viableOptions, currentByFedId, config.skipStaleUpdatesUsing);\n\n // Collect stale rows\n for (const s of [...familyClassification.stale, ...optionClassification.stale]) {\n staleRows.push({\n rowNumber: -1,\n federatedId: s.entity?.federatedId,\n reason: 'Skipped: incoming timestamp is older than existing',\n });\n }\n\n const summaries: EntityPreviewSummary[] = [\n {\n entityType: 'item (families)',\n total: families.length,\n creates: familyClassification.toCreate.length,\n updates: familyClassification.toUpdate.length,\n drops: 0,\n unchanged: familyClassification.unchanged.length,\n skippedStale: familyClassification.stale.length,\n },\n {\n entityType: 'item (options)',\n total: viableOptions.length,\n creates: optionClassification.toCreate.length,\n updates: optionClassification.toUpdate.length,\n drops: 0,\n unchanged: optionClassification.unchanged.length,\n skippedStale: optionClassification.stale.length,\n },\n ];\n\n return {\n summaries,\n badRows,\n staleRows,\n warnings,\n constructedFamilies: {\n toCreate: familyClassification.toCreate,\n toUpdate: familyClassification.toUpdate,\n unchanged: familyClassification.unchanged,\n currentByFedId,\n },\n constructedOptions: {\n toCreate: optionClassification.toCreate,\n toUpdate: optionClassification.toUpdate,\n unchanged: optionClassification.unchanged,\n skippedUpstream,\n },\n };\n}\n\n// ---------------------------------------------------------------------------\n// Execute: families first, then options\n// ---------------------------------------------------------------------------\n\nexport async function executeItemEntities(\n client: EntitiesClient,\n entitySet: ConstructedEntitySet,\n config: LoaderConfig,\n options?: ExecuteOptions,\n): Promise<ItemExecutionResult> {\n const batchSize = options?.batchSize ?? config.options?.batchSize ?? DEFAULT_BATCH_SIZE;\n const concurrency = options?.concurrency ?? config.options?.concurrency ?? DEFAULT_CONCURRENCY;\n const maxRetries = options?.maxRetries ?? config.options?.maxRetries ?? DEFAULT_MAX_RETRIES;\n const limit = pLimit(concurrency);\n\n const {\n families,\n options: itemOptions,\n optionToFamilyMap,\n } = splitIntoFamiliesAndOptions(entitySet.incomingEntities, entitySet.typesByPath);\n\n const currentByFedId = { ...entitySet.allCurrentEntitiesByFederatedId };\n const allSkippedRows: SkippedRow[] = [];\n const allWarnings: string[] = [];\n let hasFailures = false;\n\n // --- Phase 1: Families ---\n\n const familyClass = classifyEntities(families, currentByFedId, config.skipStaleUpdatesUsing);\n\n // Apply ignoreFamilyNameOnUpdate\n if (config.options?.ignoreFamilyNameOnUpdate) {\n for (const entity of familyClass.toUpdate) {\n delete entity.name;\n }\n }\n\n for (const s of familyClass.stale) {\n allSkippedRows.push({\n rowNumber: -1,\n federatedId: s.entity?.federatedId,\n reason: 'Stale update skipped (family)',\n });\n }\n\n const familyFailures: EntityFailure[] = [];\n let familyCreatedCount = 0;\n let familyUpdatedCount = 0;\n const failedFamilyFedIds = new Set<string>();\n\n // Track total for progress\n const totalOps = familyClass.toCreate.length + familyClass.toUpdate.length;\n let completedOps = 0;\n\n const reportProgress = (count: number, stage: string) => {\n completedOps += count;\n options?.onProgress?.({ stage, current: completedOps, total: totalOps });\n };\n\n // Batch create families\n const { created, failures: createFails } = await batchCreateEntities(\n client,\n familyClass.toCreate,\n 'item',\n batchSize,\n limit,\n maxRetries,\n (n) => reportProgress(n, 'execute:item-families'),\n );\n familyCreatedCount = created;\n familyFailures.push(...createFails);\n\n // Cache newly created families for option linking\n // We need the API response to get the DB id, but retryOnTimeout returns the batch result.\n // The created entities are returned in response.data — we cached them in batchCreateEntities.\n // For families that failed, record their federated IDs so we skip their options.\n for (const f of createFails) {\n failedFamilyFedIds.add(f.federatedId);\n }\n\n // Batch update families — send only changed properties\n const updateEntities = familyClass.toUpdate.map((incoming) => {\n const existing = currentByFedId[incoming.federatedId];\n return buildDiffUpdatePayload(incoming, existing);\n });\n const { updated, failures: updateFails } = await batchUpdateEntities(\n client,\n updateEntities,\n 'item',\n batchSize,\n limit,\n maxRetries,\n (n) => reportProgress(n, 'execute:item-families'),\n );\n familyUpdatedCount = updated;\n familyFailures.push(...updateFails);\n for (const f of updateFails) {\n failedFamilyFedIds.add(f.federatedId);\n }\n\n if (familyFailures.length > 0) hasFailures = true;\n\n // Refresh the current entities cache with newly created/updated families.\n // We need to fetch them because batchCreate doesn't always return full objects.\n // For simplicity, re-fetch all families by their federated IDs.\n const allFamilyFedIds = families.map((f) => f.federatedId).filter((id) => !failedFamilyFedIds.has(id));\n if (allFamilyFedIds.length > 0) {\n await refreshEntityCache(client, allFamilyFedIds, currentByFedId);\n }\n\n // --- Phase 2: Options ---\n\n // Link options to their families via itemFamilyId\n const viableOptions: any[] = [];\n for (const opt of itemOptions) {\n const famFedId = optionToFamilyMap.get(opt.federatedId);\n\n if (failedFamilyFedIds.has(famFedId)) {\n allSkippedRows.push({\n rowNumber: -1,\n federatedId: opt.federatedId,\n reason: `Skipped: family (${famFedId}) failed to load`,\n });\n continue;\n }\n\n const family = currentByFedId[famFedId];\n if (!family) {\n allSkippedRows.push({\n rowNumber: -1,\n federatedId: opt.federatedId,\n reason: `Family (${famFedId}) not found after family load phase`,\n });\n continue;\n }\n\n opt.itemFamilyId = family.id;\n viableOptions.push(opt);\n }\n\n const optionClass = classifyEntities(viableOptions, currentByFedId, config.skipStaleUpdatesUsing);\n\n // Apply ignoreOptionNameOnUpdate\n if (config.options?.ignoreOptionNameOnUpdate) {\n for (const entity of optionClass.toUpdate) {\n delete entity.name;\n }\n }\n\n // New options always get optionGroup = 'color'\n for (const entity of optionClass.toCreate) {\n entity.optionGroup = 'color';\n }\n\n for (const s of optionClass.stale) {\n allSkippedRows.push({\n rowNumber: -1,\n federatedId: s.entity?.federatedId,\n reason: 'Stale update skipped (option)',\n });\n }\n\n const optionFailures: EntityFailure[] = [];\n let optionCreatedCount = 0;\n let optionUpdatedCount = 0;\n\n // Reset progress tracking for options\n const optTotalOps = optionClass.toCreate.length + optionClass.toUpdate.length;\n let optCompletedOps = 0;\n const reportOptProgress = (count: number) => {\n optCompletedOps += count;\n options?.onProgress?.({ stage: 'execute:item-options', current: optCompletedOps, total: optTotalOps });\n };\n\n // Batch create options\n const { created: optCreated, failures: optCreateFails } = await batchCreateEntities(\n client,\n optionClass.toCreate,\n 'item',\n batchSize,\n limit,\n maxRetries,\n reportOptProgress,\n );\n optionCreatedCount = optCreated;\n optionFailures.push(...optCreateFails);\n\n // Batch update options — send only changed properties\n const optUpdateEntities = optionClass.toUpdate.map((incoming) => {\n const existing = currentByFedId[incoming.federatedId];\n return buildDiffUpdatePayload(incoming, existing);\n });\n const { updated: optUpdated, failures: optUpdateFails } = await batchUpdateEntities(\n client,\n optUpdateEntities,\n 'item',\n batchSize,\n limit,\n maxRetries,\n reportOptProgress,\n );\n optionUpdatedCount = optUpdated;\n optionFailures.push(...optUpdateFails);\n\n if (optionFailures.length > 0) hasFailures = true;\n\n const summaries: EntityExecutionSummary[] = [\n {\n entityType: 'item (families)',\n created: familyCreatedCount,\n updated: familyUpdatedCount,\n dropped: 0,\n skippedStale: familyClass.stale.length,\n failed: familyFailures.length,\n failures: familyFailures,\n },\n {\n entityType: 'item (options)',\n created: optionCreatedCount,\n updated: optionUpdatedCount,\n dropped: 0,\n skippedStale: optionClass.stale.length,\n failed: optionFailures.length,\n failures: optionFailures,\n },\n ];\n\n return { summaries, skippedRows: allSkippedRows, warnings: allWarnings, hasFailures };\n}\n\n// ---------------------------------------------------------------------------\n// Batch helpers\n// ---------------------------------------------------------------------------\n\nasync function batchCreateEntities(\n client: EntitiesClient,\n entities: any[],\n entityName: string,\n batchSize: number,\n limit: any,\n maxRetries: number,\n onBatchComplete: (count: number) => void,\n): Promise<{ created: number; failures: EntityFailure[] }> {\n let created = 0;\n const failures: EntityFailure[] = [];\n\n const chunks = chunk(entities, batchSize);\n const promises = chunks.map((batch) =>\n limit(async () => {\n try {\n console.debug(`Batch CREATE ${entityName} (${batch.length} entities):`, JSON.stringify(batch, null, 2));\n const result = await retryOnTimeout(\n client,\n EntitiesLambdaCallType.BATCHCREATE,\n { entityName, objects: batch, apiVersion: '2' },\n maxRetries,\n );\n\n if (result?.errors?.length) {\n for (const err of result.errors) {\n failures.push({\n federatedId: extractFailureId(err),\n operation: 'create',\n error: extractApiErrorMessage(err),\n });\n }\n }\n\n const errorCount = result?.errors?.length ?? 0;\n const hasData = Array.isArray(result?.data) && result.data.length > 0;\n const successCount = hasData ? result.data.length : batch.length - errorCount;\n created += Math.max(0, successCount);\n onBatchComplete(batch.length);\n } catch (e) {\n console.error(`Batch CREATE ${entityName} failed. Payload:`, JSON.stringify(batch, null, 2));\n for (const entity of batch) {\n failures.push({\n federatedId: entity.federatedId ?? 'unknown',\n operation: 'create',\n error: e.message,\n });\n }\n }\n }),\n );\n\n await Promise.all(promises);\n return { created, failures };\n}\n\nasync function batchUpdateEntities(\n client: EntitiesClient,\n entities: any[],\n entityName: string,\n batchSize: number,\n limit: any,\n maxRetries: number,\n onBatchComplete: (count: number) => void,\n): Promise<{ updated: number; failures: EntityFailure[] }> {\n let updated = 0;\n const failures: EntityFailure[] = [];\n\n const chunks = chunk(entities, batchSize);\n const promises = chunks.map((batch) =>\n limit(async () => {\n try {\n console.debug(`Batch UPDATE ${entityName} (${batch.length} entities):`, JSON.stringify(batch, null, 2));\n const result = await retryOnTimeout(\n client,\n EntitiesLambdaCallType.BATCHUPDATE,\n { entityName, objects: batch, apiVersion: '2' },\n maxRetries,\n );\n\n if (result?.errors?.length) {\n for (const err of result.errors) {\n failures.push({\n federatedId: extractFailureId(err),\n operation: 'update',\n error: extractApiErrorMessage(err),\n });\n }\n }\n\n const errorCount = result?.errors?.length ?? 0;\n const hasData = Array.isArray(result?.data) && result.data.length > 0;\n const successCount = hasData ? result.data.length : batch.length - errorCount;\n updated += Math.max(0, successCount);\n onBatchComplete(batch.length);\n } catch (e) {\n console.error(`Batch UPDATE ${entityName} failed. Payload:`, JSON.stringify(batch, null, 2));\n for (const entity of batch) {\n failures.push({\n federatedId: entity.federatedId ?? 'unknown',\n operation: 'update',\n error: e.message,\n });\n }\n }\n }),\n );\n\n await Promise.all(promises);\n return { updated, failures };\n}\n\n/**\n * Re-fetch entities by federated IDs and update the cache.\n * This is needed after family creation so we have the DB `id` for option linking.\n */\nasync function refreshEntityCache(\n client: EntitiesClient,\n federatedIds: string[],\n cache: Record<string, any>,\n): Promise<void> {\n const chunks = chunk(federatedIds, 200);\n const pLimitFetch = pLimit(5);\n const promises = chunks.map((batch) =>\n pLimitFetch(async () => {\n try {\n const items = await retryOnTimeout(client, EntitiesLambdaCallType.GET, {\n entityName: 'item',\n federatedIds: batch,\n skipHydrateRelationships: true,\n });\n if (items?.length) {\n for (const item of items) {\n cache[item.federatedId] = item;\n }\n }\n } catch (e) {\n console.warn('Failed to refresh entity cache:', e.message);\n }\n }),\n );\n await Promise.all(promises);\n}\n\n// ---------------------------------------------------------------------------\n// Classification (shared with preview)\n// ---------------------------------------------------------------------------\n\ninterface ClassifiedEntities {\n toCreate: any[];\n toUpdate: any[];\n unchanged: any[];\n stale: Array<{ entity: any; incomingTimestamp: string; existingTimestamp: string }>;\n}\n\nfunction classifyEntities(\n incomingEntities: any[],\n currentByFedId: Record<string, any>,\n skipStaleUpdatesUsing?: string,\n): ClassifiedEntities {\n const toCreate: any[] = [];\n const toUpdate: any[] = [];\n const unchanged: any[] = [];\n const stale: Array<{ entity: any; incomingTimestamp: string; existingTimestamp: string }> = [];\n\n for (const incoming of incomingEntities) {\n const fedId = incoming.federatedId;\n const existing = fedId ? currentByFedId[fedId] : undefined;\n\n if (!existing) {\n toCreate.push(incoming);\n continue;\n }\n\n if (skipStaleUpdatesUsing) {\n const incomingTs = incoming[skipStaleUpdatesUsing];\n const existingTs = existing[skipStaleUpdatesUsing];\n\n if (incomingTs && existingTs && new Date(incomingTs) < new Date(existingTs)) {\n stale.push({\n entity: incoming,\n incomingTimestamp: String(incomingTs),\n existingTimestamp: String(existingTs),\n });\n continue;\n }\n }\n\n if (UpdateNeeded(incoming, existing)) {\n toUpdate.push(incoming);\n } else {\n unchanged.push(incoming);\n }\n }\n\n return { toCreate, toUpdate, unchanged, stale };\n}\n","import { EntityType, EntitiesClient } from '@contrail/entity-types';\nimport { ObjectUtil } from '@contrail/util';\nimport { chunk } from 'lodash';\nimport { TypesByPath } from '../common/entities-helper';\nimport {\n EntitiesLambdaCallType,\n retryOnTimeout,\n UpdateNeeded,\n} from '../entities-v2/entities-helper';\nimport { reduceToFamilyProperties, setOptionOverrides, removeFamilyLevelPropsFromOption } from '../common/type-helper';\nimport {\n LoaderConfig,\n EntityExecutionSummary,\n EntityPreviewSummary,\n EntityFailure,\n SkippedRow,\n ExecuteOptions,\n ConstructedEntitySet,\n} from './types';\nimport {\n extractApiErrorMessage,\n extractFailureId,\n ItemExecutionResult,\n ItemPreviewResult,\n SplitItems,\n} from './item-execute-helpers';\n\nconst pLimit = require('p-limit');\n\nconst DEFAULT_BATCH_SIZE = 50;\nconst DEFAULT_CONCURRENCY = 20;\nconst DEFAULT_MAX_RETRIES = 3;\n\n// ---------------------------------------------------------------------------\n// Preview project-items: resolve item IDs, fetch existing by project, classify\n// ---------------------------------------------------------------------------\n\n/**\n * Preview project-item entities.\n *\n * Unlike regular items, project-items cannot be looked up by federated ID alone.\n * Existence must be checked by composite key (projectId + itemId) against the\n * target project. This function:\n * 1. Resolves item DB IDs from federated IDs\n * 2. Splits into families/options\n * 3. Fetches current project-items per project by { projectId, itemIds }\n * 4. Classifies each as create/update/unchanged using the composite key\n */\nexport async function previewProjectItemEntities(\n client: EntitiesClient,\n entitySet: ConstructedEntitySet,\n config: LoaderConfig,\n): Promise<ItemPreviewResult> {\n const maxRetries = config.options?.maxRetries ?? DEFAULT_MAX_RETRIES;\n\n // Step 1: Resolve itemsByFederatedId — we need the DB item IDs\n const itemsByFederatedId = await resolveItemsByFederatedId(\n client,\n entitySet.incomingEntities,\n maxRetries,\n );\n\n // Step 2: Split into families and options (project-item-aware: groups by famFedId + projectId)\n const {\n families,\n options: itemOptions,\n optionToFamilyMap,\n } = splitForProjectItems(entitySet.incomingEntities, entitySet.typesByPath);\n\n // Step 3: Collect unique projectIds and fetch current project-items per project\n const allItemIds = resolveItemIds(families, itemOptions, itemsByFederatedId);\n const uniqueProjectIds = new Set<string>();\n for (const entity of entitySet.incomingEntities) {\n if (entity.projectId) uniqueProjectIds.add(entity.projectId);\n }\n\n const currentProjectItemsByCompositeKey: Record<string, any> = {};\n for (const projectId of uniqueProjectIds) {\n const projectItems = await fetchCurrentProjectItemsByItemId(\n client,\n projectId,\n allItemIds,\n maxRetries,\n );\n for (const [itemId, pi] of Object.entries(projectItems)) {\n currentProjectItemsByCompositeKey[`${projectId}:${itemId}`] = pi;\n }\n }\n\n const badRows: SkippedRow[] = [];\n const staleRows: SkippedRow[] = [];\n const warnings: string[] = [];\n const skippedFamilyKeys = new Set<string>();\n\n // Classify families\n const familyToCreate: any[] = [];\n const familyToUpdate: any[] = [];\n const familyUnchanged: any[] = [];\n\n for (const family of families) {\n const item = itemsByFederatedId[family.federatedId];\n if (!item) {\n badRows.push({\n rowNumber: -1,\n federatedId: family.federatedId,\n reason: `Item not found for family federatedId: ${family.federatedId}`,\n });\n skippedFamilyKeys.add(`${family.federatedId}::${family.projectId || ''}`);\n continue;\n }\n\n const projectId = family.projectId;\n if (!projectId) {\n badRows.push({\n rowNumber: -1,\n federatedId: family.federatedId,\n reason: `No projectId resolved for family: ${family.federatedId}`,\n });\n skippedFamilyKeys.add(`${family.federatedId}::${family.projectId || ''}`);\n continue;\n }\n\n const compositeKey = `${projectId}:${item.id}`;\n const existing = currentProjectItemsByCompositeKey[compositeKey];\n\n if (!existing) {\n familyToCreate.push(family);\n } else {\n const changes = { ...family };\n delete changes.federatedId;\n delete changes.projectId;\n changes.projectId = projectId;\n changes.itemId = item.id;\n\n if (UpdateNeeded(changes, existing)) {\n familyToUpdate.push(family);\n } else {\n familyUnchanged.push(family);\n }\n }\n }\n\n // Classify options\n const optionToCreate: any[] = [];\n const optionToUpdate: any[] = [];\n const optionUnchanged: any[] = [];\n const skippedUpstream: SkippedRow[] = [];\n\n for (const opt of itemOptions) {\n const famFedId = optionToFamilyMap.get(opt.federatedId);\n const familyKey = `${famFedId}::${opt.projectId || ''}`;\n if (skippedFamilyKeys.has(familyKey)) {\n skippedUpstream.push({\n rowNumber: -1,\n federatedId: opt.federatedId,\n reason: `Skipped: family item (${famFedId}) not found`,\n });\n continue;\n }\n\n const item = itemsByFederatedId[opt.federatedId];\n if (!item) {\n badRows.push({\n rowNumber: -1,\n federatedId: opt.federatedId,\n reason: `Item not found for option federatedId: ${opt.federatedId}`,\n });\n continue;\n }\n\n const projectId = opt.projectId;\n if (!projectId) {\n badRows.push({\n rowNumber: -1,\n federatedId: opt.federatedId,\n reason: `No projectId resolved for option: ${opt.federatedId}`,\n });\n continue;\n }\n\n const compositeKey = `${projectId}:${item.id}`;\n const existing = currentProjectItemsByCompositeKey[compositeKey];\n\n if (!existing) {\n optionToCreate.push(opt);\n } else {\n const changes = { ...opt };\n delete changes.federatedId;\n delete changes.projectId;\n changes.projectId = projectId;\n changes.itemId = item.id;\n\n if (UpdateNeeded(changes, existing)) {\n optionToUpdate.push(opt);\n } else {\n optionUnchanged.push(opt);\n }\n }\n }\n\n const summaries: EntityPreviewSummary[] = [\n {\n entityType: 'project-item (families)',\n total: families.length,\n creates: familyToCreate.length,\n updates: familyToUpdate.length,\n drops: 0,\n unchanged: familyUnchanged.length,\n skippedStale: 0,\n },\n {\n entityType: 'project-item (options)',\n total: itemOptions.length - skippedUpstream.length,\n creates: optionToCreate.length,\n updates: optionToUpdate.length,\n drops: 0,\n unchanged: optionUnchanged.length,\n skippedStale: 0,\n },\n ];\n\n return {\n summaries,\n badRows,\n staleRows,\n warnings,\n constructedFamilies: {\n toCreate: familyToCreate,\n toUpdate: familyToUpdate,\n unchanged: familyUnchanged,\n currentByFedId: {},\n },\n constructedOptions: {\n toCreate: optionToCreate,\n toUpdate: optionToUpdate,\n unchanged: optionUnchanged,\n skippedUpstream,\n },\n };\n}\n\n// ---------------------------------------------------------------------------\n// Execute project-items: families first, then options, grouped by projectId\n// ---------------------------------------------------------------------------\n\n/**\n * Execute project-item entities using the upsert pattern with composite IDs.\n *\n * Project-items differ from items in several key ways:\n * - IDs are composite: `${projectId}:${itemId}`\n * - Both creates and updates use BATCHUPDATE (upsert by composite ID)\n * - Item IDs must be resolved from items table via federated IDs\n * - Current project-items are fetched by { projectId, itemIds }\n * - Each entity carries its own projectId (per-row resolution)\n *\n * The family/option split reuses the same logic as items (splitIntoFamiliesAndOptions).\n */\nexport async function executeProjectItemEntities(\n client: EntitiesClient,\n entitySet: ConstructedEntitySet,\n config: LoaderConfig,\n options?: ExecuteOptions,\n): Promise<ItemExecutionResult> {\n const batchSize = options?.batchSize ?? config.options?.batchSize ?? DEFAULT_BATCH_SIZE;\n const concurrency = options?.concurrency ?? config.options?.concurrency ?? DEFAULT_CONCURRENCY;\n const maxRetries = options?.maxRetries ?? config.options?.maxRetries ?? DEFAULT_MAX_RETRIES;\n const limit = pLimit(concurrency);\n\n // Validate that at least some entities have a projectId\n const entitiesWithProjectId = entitySet.incomingEntities.filter((e) => e.projectId);\n if (entitiesWithProjectId.length === 0) {\n return {\n summaries: [{\n entityType: 'project-item',\n created: 0,\n updated: 0,\n dropped: 0,\n skippedStale: 0,\n failed: entitySet.incomingEntities.length,\n failures: [{\n federatedId: 'N/A',\n operation: 'create',\n error: 'Could not resolve a target Project\\'s ID from the data or config provided. Include or map a workspaceIdentifier column if loading only ProjectItems, or a projectId column with the project\\'s ID directly.',\n }],\n }],\n skippedRows: [],\n warnings: ['Project ID resolution failed. No project-items were loaded because a Project could not be found to load into.'],\n hasFailures: true,\n };\n }\n\n // Step 1: Resolve itemsByFederatedId — we need the DB item IDs\n const itemsByFederatedId = await resolveItemsByFederatedId(\n client,\n entitySet.incomingEntities,\n maxRetries,\n );\n\n // Step 2: Split into families and options (project-item-aware: groups by famFedId + projectId)\n const {\n families,\n options: itemOptions,\n optionToFamilyMap,\n } = splitForProjectItems(entitySet.incomingEntities, entitySet.typesByPath);\n\n const allSkippedRows: SkippedRow[] = [];\n const allWarnings: string[] = [];\n let hasFailures = false;\n\n // Step 3: Collect unique projectIds and fetch current project-items per project\n const allItemIds = resolveItemIds(families, itemOptions, itemsByFederatedId);\n const uniqueProjectIds = new Set<string>();\n for (const entity of entitySet.incomingEntities) {\n if (entity.projectId) uniqueProjectIds.add(entity.projectId);\n }\n\n // Fetch current project-items across all projects, keyed by `${projectId}:${itemId}`\n const currentProjectItemsByCompositeKey: Record<string, any> = {};\n for (const projectId of uniqueProjectIds) {\n const projectItems = await fetchCurrentProjectItemsByItemId(\n client,\n projectId,\n allItemIds,\n maxRetries,\n );\n for (const [itemId, pi] of Object.entries(projectItems)) {\n currentProjectItemsByCompositeKey[`${projectId}:${itemId}`] = pi;\n }\n }\n\n // --- Phase 1: Family project-items ---\n\n const familyFailures: EntityFailure[] = [];\n let familyCreatedCount = 0;\n let familyUpdatedCount = 0;\n let familyUnchangedCount = 0;\n\n const familyUpserts: any[] = [];\n const skippedFamilyFedIds = new Set<string>();\n\n for (const family of families) {\n const item = itemsByFederatedId[family.federatedId];\n if (!item) {\n allSkippedRows.push({\n rowNumber: -1,\n federatedId: family.federatedId,\n reason: `Item not found for family federatedId: ${family.federatedId}`,\n });\n skippedFamilyFedIds.add(family.federatedId);\n continue;\n }\n\n const projectId = family.projectId;\n if (!projectId) {\n allSkippedRows.push({\n rowNumber: -1,\n federatedId: family.federatedId,\n reason: `No projectId resolved for family: ${family.federatedId}`,\n });\n skippedFamilyFedIds.add(family.federatedId);\n continue;\n }\n\n const compositeId = `${projectId}:${item.id}`;\n const compositeKey = `${projectId}:${item.id}`;\n const existingProjectItem = currentProjectItemsByCompositeKey[compositeKey];\n\n // Build the upsert payload\n const changes = { ...family };\n delete changes.federatedId;\n delete changes.projectId;\n changes.projectId = projectId;\n changes.itemId = item.id;\n\n if (existingProjectItem) {\n if (!UpdateNeeded(changes, existingProjectItem)) {\n familyUnchangedCount++;\n continue;\n }\n familyUpdatedCount++;\n } else {\n familyCreatedCount++;\n }\n\n familyUpserts.push({ id: compositeId, changes });\n }\n\n // Track progress\n const totalOps = familyUpserts.length;\n let completedOps = 0;\n const reportProgress = (count: number, stage: string) => {\n completedOps += count;\n options?.onProgress?.({ stage, current: completedOps, total: totalOps });\n };\n\n // Batch upsert families\n const familyUpsertResult = await batchUpsertProjectItems(\n client,\n familyUpserts,\n batchSize,\n limit,\n maxRetries,\n (n) => reportProgress(n, 'execute:project-item-families'),\n );\n familyFailures.push(...familyUpsertResult.failures);\n if (familyUpsertResult.failures.length > 0) hasFailures = true;\n\n // Update cache with upserted families\n for (const upserted of familyUpsertResult.upsertedItems) {\n if (upserted.itemId && upserted.projectId) {\n currentProjectItemsByCompositeKey[`${upserted.projectId}:${upserted.itemId}`] = upserted;\n }\n }\n\n // --- Phase 2: Option project-items ---\n\n const optionFailures: EntityFailure[] = [];\n let optionCreatedCount = 0;\n let optionUpdatedCount = 0;\n let optionUnchangedCount = 0;\n\n const optionUpserts: any[] = [];\n\n for (const opt of itemOptions) {\n const famFedId = optionToFamilyMap.get(opt.federatedId);\n\n if (skippedFamilyFedIds.has(famFedId)) {\n allSkippedRows.push({\n rowNumber: -1,\n federatedId: opt.federatedId,\n reason: `Skipped: family item (${famFedId}) not found`,\n });\n continue;\n }\n\n const item = itemsByFederatedId[opt.federatedId];\n if (!item) {\n allSkippedRows.push({\n rowNumber: -1,\n federatedId: opt.federatedId,\n reason: `Item not found for option federatedId: ${opt.federatedId}`,\n });\n continue;\n }\n\n const projectId = opt.projectId;\n if (!projectId) {\n allSkippedRows.push({\n rowNumber: -1,\n federatedId: opt.federatedId,\n reason: `No projectId resolved for option: ${opt.federatedId}`,\n });\n continue;\n }\n\n const compositeId = `${projectId}:${item.id}`;\n const compositeKey = `${projectId}:${item.id}`;\n const existingProjectItem = currentProjectItemsByCompositeKey[compositeKey];\n\n const changes = { ...opt };\n delete changes.federatedId;\n delete changes.projectId;\n changes.projectId = projectId;\n changes.itemId = item.id;\n\n if (existingProjectItem) {\n if (!UpdateNeeded(changes, existingProjectItem)) {\n optionUnchangedCount++;\n continue;\n }\n optionUpdatedCount++;\n } else {\n optionCreatedCount++;\n }\n\n optionUpserts.push({ id: compositeId, changes });\n }\n\n // Reset progress for options\n const optTotalOps = optionUpserts.length;\n let optCompletedOps = 0;\n const reportOptProgress = (count: number) => {\n optCompletedOps += count;\n options?.onProgress?.({ stage: 'execute:project-item-options', current: optCompletedOps, total: optTotalOps });\n };\n\n // Batch upsert options\n const optionUpsertResult = await batchUpsertProjectItems(\n client,\n optionUpserts,\n batchSize,\n limit,\n maxRetries,\n reportOptProgress,\n );\n optionFailures.push(...optionUpsertResult.failures);\n if (optionUpsertResult.failures.length > 0) hasFailures = true;\n\n const summaries: EntityExecutionSummary[] = [\n {\n entityType: 'project-item (families)',\n created: Math.max(0, familyCreatedCount - familyUpsertResult.failures.filter(f => f.operation === 'create').length),\n updated: Math.max(0, familyUpdatedCount - familyUpsertResult.failures.filter(f => f.operation === 'update').length),\n dropped: 0,\n skippedStale: 0,\n failed: familyFailures.length,\n failures: familyFailures,\n },\n {\n entityType: 'project-item (options)',\n created: Math.max(0, optionCreatedCount - optionUpsertResult.failures.filter(f => f.operation === 'create').length),\n updated: Math.max(0, optionUpdatedCount - optionUpsertResult.failures.filter(f => f.operation === 'update').length),\n dropped: 0,\n skippedStale: 0,\n failed: optionFailures.length,\n failures: optionFailures,\n },\n ];\n\n return { summaries, skippedRows: allSkippedRows, warnings: allWarnings, hasFailures };\n}\n\n// ---------------------------------------------------------------------------\n// Project-item-aware family/option split\n// ---------------------------------------------------------------------------\n\n/**\n * Split incoming entities into families and options for project-item loads.\n *\n * Unlike `splitIntoFamiliesAndOptions` (which groups by `itemFamilyFederatedId`\n * alone), this groups by `(itemFamilyFederatedId, projectId)` so the same item\n * in different projects produces separate family entries — each getting its own\n * project-item record.\n *\n * Options are not deduplicated (each row with an `itemOptionFederatedId` becomes\n * one option entity), and the `optionToFamilyMap` maps\n * `${optionFedId}:${projectId}` → `${familyFedId}:${projectId}` to preserve\n * the per-project relationship.\n */\nfunction splitForProjectItems(incomingEntities: any[], typesByPath: TypesByPath): SplitItems {\n // Group rows by (itemFamilyFederatedId, projectId)\n const byCompositeKey: Record<string, any[]> = {};\n for (const entity of incomingEntities) {\n const famFedId = entity.itemFamilyFederatedId;\n const projectId = entity.projectId;\n if (!famFedId) continue;\n const key = `${famFedId}::${projectId || ''}`;\n if (!byCompositeKey[key]) byCompositeKey[key] = [];\n byCompositeKey[key].push(entity);\n }\n\n const families: any[] = [];\n const options: any[] = [];\n const optionToFamilyMap = new Map<string, string>();\n\n for (const [, rows] of Object.entries(byCompositeKey)) {\n const familyRow = rows.find((r) => !r.itemOptionFederatedId) || rows[0];\n const famFedId = familyRow.itemFamilyFederatedId;\n const projectId = familyRow.projectId;\n const typePath = familyRow.typePath || EntityType.ITEM;\n const typeInfo = typesByPath[typePath];\n const type = typeInfo?.type;\n\n // Build family entity\n const familyClone = ObjectUtil.cloneDeep(familyRow);\n const familyEntity = type ? reduceToFamilyProperties(familyClone, type) : { ...familyClone };\n familyEntity.federatedId = famFedId;\n familyEntity.projectId = projectId;\n delete familyEntity.optionGroup;\n delete familyEntity.optionName;\n delete familyEntity.itemFamilyFederatedId;\n delete familyEntity.itemOptionFederatedId;\n families.push(familyEntity);\n\n // Build option entities\n for (const row of rows) {\n if (!row.itemOptionFederatedId) continue;\n const optionFedId = row.itemOptionFederatedId;\n const optClone = ObjectUtil.cloneDeep(row);\n optClone.federatedId = optionFedId;\n optClone.projectId = row.projectId;\n optionToFamilyMap.set(optionFedId, famFedId);\n delete optClone.itemFamilyFederatedId;\n delete optClone.itemOptionFederatedId;\n\n if (type) {\n setOptionOverrides(optClone, { typeProperties: type.typeProperties });\n removeFamilyLevelPropsFromOption(optClone, type);\n }\n options.push(optClone);\n }\n }\n\n return { families, options, optionToFamilyMap };\n}\n\n// ---------------------------------------------------------------------------\n// Item ID resolution\n// ---------------------------------------------------------------------------\n\n/**\n * Resolve items by their federated IDs. Returns a map of federatedId -> item.\n * This is needed to get the DB `id` for composite ID construction.\n */\nasync function resolveItemsByFederatedId(\n client: EntitiesClient,\n incomingEntities: any[],\n maxRetries: number,\n): Promise<Record<string, any>> {\n const federatedIds = new Set<string>();\n for (const entity of incomingEntities) {\n if (entity.itemFamilyFederatedId) federatedIds.add(entity.itemFamilyFederatedId);\n if (entity.itemOptionFederatedId) federatedIds.add(entity.itemOptionFederatedId);\n }\n\n const result: Record<string, any> = {};\n const chunks = chunk(Array.from(federatedIds), 200);\n const limit = pLimit(5);\n\n const promises = chunks.map((batch) =>\n limit(async () => {\n try {\n const items = await retryOnTimeout(\n client,\n EntitiesLambdaCallType.GET,\n {\n entityName: 'item',\n federatedIds: batch,\n skipHydrateRelationships: true,\n },\n maxRetries,\n );\n if (items?.length) {\n for (const item of items) {\n result[item.federatedId] = item;\n }\n }\n } catch (e) {\n console.warn('Failed to resolve items by federatedId:', e.message);\n }\n }),\n );\n\n await Promise.all(promises);\n return result;\n}\n\n/**\n * Collect all item IDs from families and options after resolving from itemsByFederatedId.\n */\nfunction resolveItemIds(\n families: any[],\n options: any[],\n itemsByFederatedId: Record<string, any>,\n): string[] {\n const ids = new Set<string>();\n for (const entity of [...families, ...options]) {\n const item = itemsByFederatedId[entity.federatedId];\n if (item?.id) ids.add(item.id);\n }\n return Array.from(ids);\n}\n\n// ---------------------------------------------------------------------------\n// Fetch current project-items\n// ---------------------------------------------------------------------------\n\n/**\n * Fetch current project-items by { projectId, itemIds }, keyed by itemId.\n */\nasync function fetchCurrentProjectItemsByItemId(\n client: EntitiesClient,\n projectId: string,\n itemIds: string[],\n maxRetries: number,\n): Promise<Record<string, any>> {\n const result: Record<string, any> = {};\n if (!itemIds.length) return result;\n\n const chunks = chunk(itemIds, 200);\n const limit = pLimit(5);\n\n const promises = chunks.map((batch) =>\n limit(async () => {\n try {\n const projectItems = await retryOnTimeout(\n client,\n EntitiesLambdaCallType.GET,\n {\n entityName: 'project-item',\n criteria: { projectId, itemIds: batch },\n skipHydrateRelationships: true,\n },\n maxRetries,\n );\n if (projectItems?.length) {\n for (const pi of projectItems) {\n result[pi.itemId] = pi;\n }\n }\n } catch (e) {\n console.warn('Failed to fetch current project-items:', e.message);\n }\n }),\n );\n\n await Promise.all(promises);\n return result;\n}\n\n// ---------------------------------------------------------------------------\n// Batch upsert (BATCHUPDATE with composite IDs)\n// ---------------------------------------------------------------------------\n\ninterface UpsertResult {\n successCount: number;\n failures: EntityFailure[];\n upsertedItems: any[];\n}\n\nasync function batchUpsertProjectItems(\n client: EntitiesClient,\n entities: Array<{ id: string; changes: any }>,\n batchSize: number,\n limit: any,\n maxRetries: number,\n onBatchComplete: (count: number) => void,\n): Promise<UpsertResult> {\n let successCount = 0;\n const failures: EntityFailure[] = [];\n const upsertedItems: any[] = [];\n\n const chunks = chunk(entities, batchSize);\n const promises = chunks.map((batch) =>\n limit(async () => {\n try {\n const result = await retryOnTimeout(\n client,\n EntitiesLambdaCallType.BATCHUPDATE,\n {\n entityName: 'project-item',\n objects: batch,\n apiVersion: '2',\n },\n maxRetries,\n );\n\n if (result?.errors?.length) {\n for (const err of result.errors) {\n failures.push({\n federatedId: err?.entity?.id ?? extractFailureId(err),\n operation: 'create',\n error: extractApiErrorMessage(err),\n });\n }\n }\n\n const updatedItems = result?.data || [];\n upsertedItems.push(...updatedItems);\n\n const errorCount = result?.errors?.length ?? 0;\n const hasData = Array.isArray(result?.data) && result.data.length > 0;\n const batchSuccessCount = hasData ? result.data.length : batch.length - errorCount;\n successCount += Math.max(0, batchSuccessCount);\n onBatchComplete(batch.length);\n } catch (e) {\n for (const entity of batch) {\n failures.push({\n federatedId: entity.id,\n operation: 'create',\n error: e.message,\n });\n }\n }\n }),\n );\n\n await Promise.all(promises);\n return { successCount, failures, upsertedItems };\n}\n","import { EntitiesClient, EntityType } from '@contrail/entity-types';\nimport { chunk } from 'lodash';\nimport { EntitiesLambdaCallType, retryOnTimeout, UpdateNeeded } from '../entities-v2/entities-helper';\nimport { EntityProcessorV2 } from '../entities-v2/entity-processor-v2';\nimport {\n LoaderConfig,\n ColumnAnalysisResult,\n ExecuteOptions,\n ExecutionResult,\n EntityExecutionSummary,\n EntityFailure,\n SkippedRow,\n PreviewResult,\n ConstructedEntitySet,\n toLoaderProcessCompat,\n loadTypeToEntityTypes,\n} from './types';\nimport { executeItemEntities, buildDiffUpdatePayload, extractApiErrorMessage, extractFailureId } from './item-execute-helpers';\nimport { executeProjectItemEntities } from './project-item-execute-helpers';\n\nconst pLimit = require('p-limit');\n\nconst DEFAULT_BATCH_SIZE = 25;\nconst DEFAULT_CONCURRENCY = 5;\nconst DEFAULT_MAX_RETRIES = 3;\n\n/**\n * Stage 5: Execute the load — persist entities via batch create/update.\n *\n * If preview data is provided (from Stage 4), it reuses the already-constructed\n * entities. Otherwise, it runs entity construction internally.\n *\n * Handles:\n * - Batch create/update with configurable batch size and concurrency\n * - Retry on timeout errors\n * - Stale update skipping (skipStaleUpdatesUsing)\n * - Progress reporting\n * - Error aggregation into ExecutionResult\n */\nexport async function execute(\n client: EntitiesClient,\n rows: Record<string, any>[],\n config: LoaderConfig,\n columnAnalysis: ColumnAnalysisResult,\n options?: ExecuteOptions,\n previewData?: PreviewResult,\n): Promise<ExecutionResult> {\n const startTime = Date.now();\n const batchSize = options?.batchSize ?? config.options?.batchSize ?? DEFAULT_BATCH_SIZE;\n const concurrency = options?.concurrency ?? config.options?.concurrency ?? DEFAULT_CONCURRENCY;\n const maxRetries = options?.maxRetries ?? config.options?.maxRetries ?? DEFAULT_MAX_RETRIES;\n const limit = pLimit(concurrency);\n\n const entityTypes = enforceExecutionOrder(loadTypeToEntityTypes(config.loadType));\n const loaderProcess = toLoaderProcessCompat(config);\n const allEntitySummaries: EntityExecutionSummary[] = [];\n const allSkippedRows: SkippedRow[] = [];\n const allWarnings: string[] = [];\n let hasFailures = false;\n\n for (const entityType of entityTypes) {\n // Get or construct entity data\n let entitySet: ConstructedEntitySet;\n\n if (previewData?.constructedEntities?.[entityType]) {\n entitySet = previewData.constructedEntities[entityType];\n } else {\n // Construct entities from scratch (shallow-clone rows to avoid mutating caller's data)\n const clonedRows = rows.map(row => ({ ...row }));\n const result = await EntityProcessorV2.setupEntities(\n client,\n entityType,\n clonedRows,\n undefined,\n loaderProcess,\n );\n entitySet = {\n incomingEntities: result.incomingEntities || [],\n badEntities: result.badEntities || [],\n allCurrentEntitiesByFederatedId: result.allCurrentEntitiesByFederatedId || {},\n typesByPath: result.typesByPath || {},\n projectId: result.projectId,\n generalWarnings: result.generalWarnings,\n };\n }\n\n // Collect bad row skips\n for (const bad of entitySet.badEntities) {\n allSkippedRows.push({\n rowNumber: -1,\n federatedId: bad?.federatedId,\n reason: 'Failed entity construction',\n });\n }\n\n // Collect warnings\n if (entitySet.generalWarnings?.length) {\n for (const w of entitySet.generalWarnings) {\n allWarnings.push(w.message);\n }\n }\n\n // For ITEM loads, use the family-first / option-second execution pattern\n if (entityType === EntityType.ITEM) {\n const itemResult = await executeItemEntities(client, entitySet, config, options);\n allEntitySummaries.push(...itemResult.summaries);\n allSkippedRows.push(...itemResult.skippedRows);\n allWarnings.push(...itemResult.warnings);\n if (itemResult.hasFailures) hasFailures = true;\n continue;\n }\n\n // For PROJECT_ITEM loads, use composite ID upsert pattern\n if (entityType === EntityType.PROJECT_ITEM) {\n const projectItemResult = await executeProjectItemEntities(client, entitySet, config, options);\n allEntitySummaries.push(...projectItemResult.summaries);\n allSkippedRows.push(...projectItemResult.skippedRows);\n allWarnings.push(...projectItemResult.warnings);\n if (projectItemResult.hasFailures) hasFailures = true;\n continue;\n }\n\n // Non-ITEM entity types: flat create/update flow\n const { toCreate, toUpdate, stale, unchanged } = classifyForExecution(\n entitySet.incomingEntities,\n entitySet.allCurrentEntitiesByFederatedId,\n config,\n );\n\n // Collect stale skips\n for (const s of stale) {\n allSkippedRows.push({\n rowNumber: -1,\n federatedId: s.entity?.federatedId,\n reason: 'Stale update skipped',\n details: {\n incomingTimestamp: s.incomingTimestamp,\n existingTimestamp: s.existingTimestamp,\n },\n });\n }\n\n // Apply update-specific adjustments\n if (config.options?.ignoreFamilyNameOnUpdate) {\n for (const entity of toUpdate) {\n delete entity.name;\n }\n }\n\n if (config.options?.ignoreOptionNameOnUpdate) {\n for (const entity of toUpdate) {\n delete entity.optionName;\n }\n }\n\n // Determine the entity name for SDK calls\n const sdkEntityName = getSdkEntityName(entityType);\n\n // Report progress\n const totalOperations = toCreate.length + toUpdate.length;\n let completedOperations = 0;\n\n const reportProgress = (count: number) => {\n completedOperations += count;\n options?.onProgress?.({\n stage: `execute:${entityType}`,\n current: completedOperations,\n total: totalOperations,\n });\n };\n\n // Execute batch creates\n const createFailures: EntityFailure[] = [];\n let createdCount = 0;\n\n const createChunks = chunk(toCreate, batchSize);\n const createPromises = createChunks.map((batch) =>\n limit(async () => {\n try {\n const result = await retryOnTimeout(\n client,\n EntitiesLambdaCallType.BATCHCREATE,\n {\n entityName: sdkEntityName,\n objects: batch,\n apiVersion: '2',\n },\n maxRetries,\n );\n\n // Handle partial failures in batch result\n if (result?.errors?.length) {\n for (const err of result.errors) {\n createFailures.push({\n federatedId: extractFailureId(err),\n operation: 'create',\n error: extractApiErrorMessage(err),\n });\n }\n }\n\n const errorCount = result?.errors?.length ?? 0;\n const hasData = Array.isArray(result?.data) && result.data.length > 0;\n const successCount = hasData ? result.data.length : batch.length - errorCount;\n createdCount += Math.max(0, successCount);\n reportProgress(batch.length);\n } catch (e) {\n // Entire batch failed\n for (const entity of batch) {\n createFailures.push({\n federatedId: entity.federatedId ?? 'unknown',\n operation: 'create',\n error: e.message,\n });\n }\n hasFailures = true;\n }\n }),\n );\n\n await Promise.all(createPromises);\n\n // Execute batch updates\n const updateFailures: EntityFailure[] = [];\n let updatedCount = 0;\n\n // For updates, build diff-only payloads with just the changed properties\n const updateEntities = toUpdate.map((incoming) => {\n const existing = entitySet.allCurrentEntitiesByFederatedId[incoming.federatedId];\n return buildDiffUpdatePayload(incoming, existing);\n });\n\n const updateChunks = chunk(updateEntities, batchSize);\n const updatePromises = updateChunks.map((batch) =>\n limit(async () => {\n try {\n const result = await retryOnTimeout(\n client,\n EntitiesLambdaCallType.BATCHUPDATE,\n {\n entityName: sdkEntityName,\n objects: batch,\n apiVersion: '2',\n },\n maxRetries,\n );\n\n if (result?.errors?.length) {\n for (const err of result.errors) {\n updateFailures.push({\n federatedId: extractFailureId(err),\n operation: 'update',\n error: extractApiErrorMessage(err),\n });\n }\n }\n\n const errorCount = result?.errors?.length ?? 0;\n const hasData = Array.isArray(result?.data) && result.data.length > 0;\n const successCount = hasData ? result.data.length : batch.length - errorCount;\n updatedCount += Math.max(0, successCount);\n reportProgress(batch.length);\n } catch (e) {\n for (const entity of batch) {\n updateFailures.push({\n federatedId: entity.federatedId ?? 'unknown',\n operation: 'update',\n error: e.message,\n });\n }\n hasFailures = true;\n }\n }),\n );\n\n await Promise.all(updatePromises);\n\n const allFailures = [...createFailures, ...updateFailures];\n if (allFailures.length > 0) hasFailures = true;\n\n allEntitySummaries.push({\n entityType,\n created: createdCount,\n updated: updatedCount,\n dropped: 0,\n skippedStale: stale.length,\n failed: allFailures.length,\n failures: allFailures,\n });\n }\n\n const duration = Date.now() - startTime;\n\n // Determine overall status\n let status: 'complete' | 'partial-failure' | 'failed';\n const totalSuccessful = allEntitySummaries.reduce((sum, e) => sum + e.created + e.updated, 0);\n const totalFailed = allEntitySummaries.reduce((sum, e) => sum + e.failed, 0);\n\n if (totalFailed === 0) {\n status = 'complete';\n } else if (totalSuccessful > 0) {\n status = 'partial-failure';\n } else {\n status = 'failed';\n }\n\n return {\n status,\n entities: allEntitySummaries,\n skippedRows: allSkippedRows,\n warnings: allWarnings,\n duration,\n };\n}\n\n// ---------------------------------------------------------------------------\n// Internal helpers\n// ---------------------------------------------------------------------------\n\ninterface ClassifiedForExecution {\n toCreate: any[];\n toUpdate: any[];\n unchanged: any[];\n stale: Array<{ entity: any; incomingTimestamp: string; existingTimestamp: string }>;\n}\n\nfunction classifyForExecution(\n incomingEntities: any[],\n currentByFedId: Record<string, any>,\n config: LoaderConfig,\n): ClassifiedForExecution {\n const toCreate: any[] = [];\n const toUpdate: any[] = [];\n const unchanged: any[] = [];\n const stale: Array<{ entity: any; incomingTimestamp: string; existingTimestamp: string }> = [];\n\n for (const incoming of incomingEntities) {\n const fedId = incoming.federatedId;\n const existing = fedId ? currentByFedId[fedId] : undefined;\n\n if (!existing) {\n toCreate.push(incoming);\n continue;\n }\n\n // Stale check\n if (config.skipStaleUpdatesUsing) {\n const incomingTs = incoming[config.skipStaleUpdatesUsing];\n const existingTs = existing[config.skipStaleUpdatesUsing];\n\n if (incomingTs && existingTs && new Date(incomingTs) < new Date(existingTs)) {\n stale.push({\n entity: incoming,\n incomingTimestamp: String(incomingTs),\n existingTimestamp: String(existingTs),\n });\n continue;\n }\n }\n\n if (UpdateNeeded(incoming, existing)) {\n toUpdate.push(incoming);\n } else {\n unchanged.push(incoming);\n }\n }\n\n return { toCreate, toUpdate, unchanged, stale };\n}\n\n/**\n * Map EntityType enum values to the SDK entity name used in API calls.\n */\nfunction getSdkEntityName(entityType: EntityType): string {\n // EntityType values are: 'color', 'custom-entity', 'item', 'project-item', 'assortment-item'\n // These are already the SDK entity names\n return entityType;\n}\n\n/**\n * Enforce execution order: ITEM must run before all other entity types,\n * since PROJECT_ITEM and ASSORTMENT depend on items existing first.\n * Other entity types retain their original order.\n *\n * TODO: Items should always go first, but non-ITEM types can execute in parallel\n */\nfunction enforceExecutionOrder(entityTypes: EntityType[]): EntityType[] {\n const itemFirst: EntityType[] = [];\n const rest: EntityType[] = [];\n\n for (const et of entityTypes) {\n if (et === EntityType.ITEM) {\n itemFirst.push(et);\n } else {\n rest.push(et);\n }\n }\n\n return [...itemFirst, ...rest];\n}\n","import { EntitiesClient } from '@contrail/entity-types';\nimport { fetchTypeDefinitions } from './fetch-type-definitions';\nimport { analyzeColumns } from './analyze-columns';\nimport { preprocess } from './preprocess';\nimport { validate } from './validate';\nimport { preview } from './preview';\nimport { execute } from './execute';\nimport {\n LoaderConfig,\n TypeDefinitionsResult,\n ColumnAnalysisResult,\n PreprocessResult,\n PreviewResult,\n ExecutionResult,\n ExecuteOptions,\n PreValidationResult,\n} from './types';\n\n/**\n * LoaderPipeline orchestrates the loader workflow.\n *\n * Stage order:\n * 0. Fetch Type Definitions — fetch type property maps from the API\n * 1. Preprocess — transform raw CSV data (federated mappings, coercion, etc.)\n * 2. Analyze Columns — classify post-preprocessed headers against type definitions\n * 3. Validate — check for structural and data quality issues\n * 4. Preview — classify rows as create/update/unchanged without persisting\n * 5. Execute — persist entities via batch create/update\n *\n * Usage:\n * ```typescript\n * const pipeline = new LoaderPipeline(new Entities());\n *\n * const typeDefs = await pipeline.fetchTypeDefinitions(data, config);\n * const preprocessed = await pipeline.preprocess(data, config, typeDefs);\n * const analysis = pipeline.analyzeColumns(preprocessed, config, typeDefs);\n * const validation = await pipeline.validate(preprocessed, config, analysis);\n *\n * if (validation.valid) {\n * const previewResult = await pipeline.preview(preprocessed, config, analysis);\n * const result = await pipeline.execute(preprocessed, config, analysis);\n * }\n * ```\n */\nexport class LoaderPipeline {\n private client: EntitiesClient;\n\n constructor(client: EntitiesClient) {\n this.client = client;\n }\n\n /**\n * Stage 0: Fetch type definitions from the API.\n * Returns type property maps, typesByPath, and entity types needed by\n * both preprocessing and column analysis.\n */\n async fetchTypeDefinitions(\n data: Record<string, any>[],\n config: LoaderConfig,\n ): Promise<TypeDefinitionsResult> {\n return fetchTypeDefinitions(this.client, data, config);\n }\n\n /**\n * Stage 1: Apply the full preprocessing pipeline.\n * Transforms raw CSV data using the 5-step pipeline:\n * applyFederatedMappings → applyConditionalColumns → removeUnwantedProperties →\n * transformDataBasedOnTypes → coerceValuesByType\n */\n async preprocess(\n data: Record<string, any>[],\n config: LoaderConfig,\n typeDefs: TypeDefinitionsResult,\n ): Promise<PreprocessResult> {\n return preprocess(data, config, typeDefs.typePropertyMaps);\n }\n\n /**\n * Stage 2: Analyze preprocessed columns against type definitions.\n * Runs after preprocessing so column headers reflect federated mappings\n * and other transformations.\n */\n analyzeColumns(\n preprocessed: PreprocessResult,\n config: LoaderConfig,\n typeDefs: TypeDefinitionsResult,\n ): ColumnAnalysisResult {\n return analyzeColumns(preprocessed.rows, config, typeDefs);\n }\n\n /**\n * Stage 3: Validate preprocessed data.\n * Runs all validations against the transformed data, including:\n * - Structural validation (missing required fields, invalid config)\n * - Option set validation (unknown values)\n * - Boolean format validation\n * - Multi-select format validation\n */\n async validate(\n preprocessed: PreprocessResult,\n config: LoaderConfig,\n analysis: ColumnAnalysisResult,\n ): Promise<PreValidationResult> {\n return validate(preprocessed.rows, config, analysis, this.client);\n }\n\n /**\n * Stage 4: Preview what the load will do.\n * Constructs entities, resolves references, fetches existing entities,\n * and classifies each as create/update/unchanged/stale — without persisting.\n */\n async preview(\n preprocessed: PreprocessResult,\n config: LoaderConfig,\n analysis: ColumnAnalysisResult,\n ): Promise<PreviewResult> {\n return preview(this.client, preprocessed.rows, config, analysis);\n }\n\n /**\n * Stage 5: Execute the load — persist entities.\n * Batch creates/updates entities via the SDK client.\n *\n * If preview() was already called, pass its result to avoid redundant\n * entity construction.\n */\n async execute(\n preprocessed: PreprocessResult,\n config: LoaderConfig,\n analysis: ColumnAnalysisResult,\n options?: ExecuteOptions,\n previewData?: PreviewResult,\n ): Promise<ExecutionResult> {\n return execute(this.client, preprocessed.rows, config, analysis, options, previewData);\n }\n}\n"],"mappings":"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","names":["exports","exports","exports","AppAccessGrantScope","exports","exports","exports","exports","AppExtensionType","AppExtensionUserApps","exports","AppOrgStatus","exports","AppVersionStatus","NodeRuntime","exports","exports","AssortmentType","exports","exports","exports","exports","exports","exports","TimeoutError","SortOrderOptions","API_VERSION","EntitiesClient","exports","exports","exports","exports","exports","exports","EventWorkflowStatus","exports","exports","exports","exports","ColumnDefinition","ConditionalValues","AssortmentSplit","LoadStatus","LoadType","IssueType","LoaderFailureArea","EntityType","PreValidationCategory","PreValidationSeverity","SuggestedFixType","exports","LogLevel","exports","exports","exports","exports","exports","PropertyType","exports","SharedLinkAccessLevel","exports","SubscriptionType","SubscriptionChannel","exports","exports","UserOrgRole","SystemRole","PlatformRole","exports","WorkspaceType","exports","exports","WorkspacePrincipalRole","exports","exports","exports","c","i","l","i2","_a","_b","td","err","dat","fl","Deflate","chunk","AsyncDeflate","Inflate","AsyncInflate","Gzip","AsyncGzip","Gunzip","AsyncGunzip","Zlib","AsyncZlib","Unzlib","AsyncUnzlib","Decompress","AsyncDecompress","DecodeUTF8","EncodeUTF8","ZipPassThrough","ZipDeflate","AsyncZipDeflate","Zip","UnzipPassThrough","UnzipInflate","AsyncUnzipInflate","Unzip","final","e","exports","exports","exports","exports","exports","StringUtil","exports","exports","exports","exports","exports","exports","PropertyType","exports","NumberFormat","CopyBehavior","PropertyLevel","TypePropertySortOrder","exports","exports","exports","exports","exports","exports","exports","exports","exports","exports","exports","exports","exports","exports","exports","exports","exports","exports","exports","exports","exports","exports","exports","exports","exports","exports","exports","CopyMethodTypes","exports","require_lib","exports","exports","exports","ObjectUtil","cleaned","exports","exports","chunk","limit","exports","exports","TimeUnit","require_lib","exports","exports","compareEntityCollections","exports","require_lib","exports","import_entity_types","import_util","parse","limit","chunk","import_entity_types","pLimit","fetch","import_entity_types","import_entity_types","import_types","parse","import_lodash","import_util","import_types","import_entity_types","import_entity_types","import_entity_types","import_lodash","pLimit","limit","chunk","import_entity_types","import_entity_types","import_lodash","pLimit","limit","chunk","import_entity_compare","import_entity_types","import_lodash","import_lodash","import_entity_types","import_lodash","import_lodash","import_entity_types","pLimit","limit","chunk","import_entity_types","import_entity_types","import_entity_types","removeHexHash","import_entity_types","import_entity_types","import_util","import_types","import_lodash","import_entity_types","pLimit","retryOnTimeout","parseDateOrNumberKey","parse","import_entity_types","import_entity_types","import_types","retryOnTimeout","import_entity_types","import_entity_types","import_util","import_lodash","pLimit","limit","retryOnTimeout","import_entity_types","import_util","import_lodash","pLimit","DEFAULT_BATCH_SIZE","DEFAULT_CONCURRENCY","DEFAULT_MAX_RETRIES","limit","retryOnTimeout","classifyEntities","import_entity_types","import_lodash","pLimit","DEFAULT_BATCH_SIZE","DEFAULT_CONCURRENCY","DEFAULT_MAX_RETRIES","limit","retryOnTimeout"]}
|