utneque 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.editorconfig +10 -0
- package/.eslintrc.isomorphic.js +26 -0
- package/.eslintrc.js +86 -0
- package/.gitattributes +1 -0
- package/.github/workflows/ci.yml +33 -0
- package/.github/workflows/deploy-browser-cdn-candidate.yml +51 -0
- package/.github/workflows/deploy-releases.yml +178 -0
- package/.nvmrc +1 -0
- package/.prettierrc +7 -0
- package/.vscode/extensions.json +3 -0
- package/.vscode/launch.json +81 -0
- package/.vscode/settings.json +41 -0
- package/.yarn/plugins/@yarnpkg/plugin-constraints.cjs +52 -0
- package/.yarn/plugins/@yarnpkg/plugin-interactive-tools.cjs +546 -0
- package/.yarn/plugins/@yarnpkg/plugin-typescript.cjs +9 -0
- package/.yarn/plugins/@yarnpkg/plugin-workspace-tools.cjs +28 -0
- package/.yarn/releases/yarn-3.4.1.cjs +873 -0
- package/.yarnrc.yml +15 -0
- package/jest.config.js +18 -0
- package/package.json +59 -0
- package/packages/browser/.eslintrc.js +9 -0
- package/packages/browser/.lintstagedrc.js +1 -0
- package/packages/browser/ARCHITECTURE.md +48 -0
- package/packages/browser/LICENSE.MD +45 -0
- package/packages/browser/Makefile +64 -0
- package/packages/browser/README.md +227 -0
- package/packages/browser/e2e-tests/local-server.ts +28 -0
- package/packages/browser/e2e-tests/performance/ajs-perf-browser.test.ts +75 -0
- package/packages/browser/jest.config.js +15 -0
- package/packages/browser/jest.setup.js +10 -0
- package/packages/browser/package.json +106 -0
- package/packages/browser/qa/README.md +41 -0
- package/packages/browser/qa/__fixtures__/snippets.ts +148 -0
- package/packages/browser/qa/__tests__/backwards-compatibility.test.ts +180 -0
- package/packages/browser/qa/__tests__/destinations.test.ts +101 -0
- package/packages/browser/qa/__tests__/smoke.test.ts +170 -0
- package/packages/browser/qa/lib/benchmark.ts +36 -0
- package/packages/browser/qa/lib/browser.ts +28 -0
- package/packages/browser/qa/lib/jest-reporter.js +57 -0
- package/packages/browser/qa/lib/runner.ts +142 -0
- package/packages/browser/qa/lib/schema.ts +59 -0
- package/packages/browser/qa/lib/server.ts +54 -0
- package/packages/browser/qa/lib/stats.ts +52 -0
- package/packages/browser/scripts/build-prep.sh +7 -0
- package/packages/browser/scripts/ci.sh +15 -0
- package/packages/browser/scripts/release.js +121 -0
- package/packages/browser/scripts/release.sh +9 -0
- package/packages/browser/scripts/run.sh +8 -0
- package/packages/browser/src/browser/__tests__/analytics-lazy-init.integration.test.ts +51 -0
- package/packages/browser/src/browser/__tests__/analytics-pre-init.integration.test.ts +440 -0
- package/packages/browser/src/browser/__tests__/anon-id-and-reset.integration.test.ts +73 -0
- package/packages/browser/src/browser/__tests__/cdn.test.ts +53 -0
- package/packages/browser/src/browser/__tests__/csp-detection.test.ts +140 -0
- package/packages/browser/src/browser/__tests__/inspector.integration.test.ts +121 -0
- package/packages/browser/src/browser/__tests__/integration.test.ts +1213 -0
- package/packages/browser/src/browser/__tests__/integrations.integration.test.ts +260 -0
- package/packages/browser/src/browser/__tests__/page-enrichment.integration.test.ts +216 -0
- package/packages/browser/src/browser/__tests__/query-string.integration.test.ts +116 -0
- package/packages/browser/src/browser/__tests__/standalone-analytics.test.ts +303 -0
- package/packages/browser/src/browser/__tests__/standalone-errors.test.ts +136 -0
- package/packages/browser/src/browser/__tests__/standalone.test.ts +97 -0
- package/packages/browser/src/browser/__tests__/typedef-tests/analytics-browser.ts +150 -0
- package/packages/browser/src/browser/__tests__/update-cdn-settings.test.ts +71 -0
- package/packages/browser/src/browser/browser-umd.ts +19 -0
- package/packages/browser/src/browser/index.ts +486 -0
- package/packages/browser/src/browser/standalone-analytics.ts +62 -0
- package/packages/browser/src/browser/standalone-interface.ts +11 -0
- package/packages/browser/src/browser/standalone.ts +92 -0
- package/packages/browser/src/core/__tests__/track-form.test.ts +193 -0
- package/packages/browser/src/core/__tests__/track-link.test.ts +252 -0
- package/packages/browser/src/core/analytics/__tests__/integration.test.ts +334 -0
- package/packages/browser/src/core/analytics/__tests__/test-plugins.ts +94 -0
- package/packages/browser/src/core/analytics/index.ts +672 -0
- package/packages/browser/src/core/analytics/interfaces.ts +100 -0
- package/packages/browser/src/core/arguments-resolver/__tests__/index.test.ts +524 -0
- package/packages/browser/src/core/arguments-resolver/index.ts +200 -0
- package/packages/browser/src/core/auto-track.ts +152 -0
- package/packages/browser/src/core/buffer/__tests__/index.test.ts +455 -0
- package/packages/browser/src/core/buffer/index.ts +371 -0
- package/packages/browser/src/core/callback/index.ts +1 -0
- package/packages/browser/src/core/connection/__tests__/index.test.ts +25 -0
- package/packages/browser/src/core/connection/index.ts +13 -0
- package/packages/browser/src/core/constants/index.ts +1 -0
- package/packages/browser/src/core/context/__tests__/index.test.ts +201 -0
- package/packages/browser/src/core/context/index.ts +21 -0
- package/packages/browser/src/core/environment/index.ts +7 -0
- package/packages/browser/src/core/events/__tests__/index.test.ts +450 -0
- package/packages/browser/src/core/events/index.ts +280 -0
- package/packages/browser/src/core/events/interfaces.ts +36 -0
- package/packages/browser/src/core/inspector/index.ts +14 -0
- package/packages/browser/src/core/page/__tests__/index.test.ts +130 -0
- package/packages/browser/src/core/page/add-page-context.ts +33 -0
- package/packages/browser/src/core/page/get-page-context.ts +140 -0
- package/packages/browser/src/core/page/index.ts +2 -0
- package/packages/browser/src/core/plugin/index.ts +12 -0
- package/packages/browser/src/core/query-string/__tests__/gracefulDecodeURIComponent.test.ts +17 -0
- package/packages/browser/src/core/query-string/__tests__/index.test.ts +149 -0
- package/packages/browser/src/core/query-string/__tests__/pickPrefix.test.ts +31 -0
- package/packages/browser/src/core/query-string/__tests__/useQueryString.test.ts +60 -0
- package/packages/browser/src/core/query-string/gracefulDecodeURIComponent.ts +16 -0
- package/packages/browser/src/core/query-string/index.ts +64 -0
- package/packages/browser/src/core/query-string/pickPrefix.ts +20 -0
- package/packages/browser/src/core/queue/__tests__/event-queue.test.ts +82 -0
- package/packages/browser/src/core/queue/event-queue.ts +22 -0
- package/packages/browser/src/core/session/__tests__/index.test.ts +41 -0
- package/packages/browser/src/core/session/index.ts +107 -0
- package/packages/browser/src/core/stats/__tests__/index.test.ts +15 -0
- package/packages/browser/src/core/stats/__tests__/remote-metrics.test.ts +189 -0
- package/packages/browser/src/core/stats/index.ts +15 -0
- package/packages/browser/src/core/stats/remote-metrics.ts +144 -0
- package/packages/browser/src/core/storage/__tests__/cookieStorage.test.ts +58 -0
- package/packages/browser/src/core/storage/__tests__/localStorage.test.ts +70 -0
- package/packages/browser/src/core/storage/__tests__/test-helpers.ts +26 -0
- package/packages/browser/src/core/storage/__tests__/universalStorage.test.ts +167 -0
- package/packages/browser/src/core/storage/cookieStorage.ts +80 -0
- package/packages/browser/src/core/storage/index.ts +64 -0
- package/packages/browser/src/core/storage/localStorage.ts +45 -0
- package/packages/browser/src/core/storage/memoryStorage.ts +22 -0
- package/packages/browser/src/core/storage/settings.ts +23 -0
- package/packages/browser/src/core/storage/types.ts +49 -0
- package/packages/browser/src/core/storage/universalStorage.ts +78 -0
- package/packages/browser/src/core/user/__tests__/index.test.ts +922 -0
- package/packages/browser/src/core/user/__tests__/migrate.test.ts +101 -0
- package/packages/browser/src/core/user/__tests__/session.test.ts +136 -0
- package/packages/browser/src/core/user/__tests__/tld.test.ts +36 -0
- package/packages/browser/src/core/user/index.ts +399 -0
- package/packages/browser/src/core/user/migrate.ts +126 -0
- package/packages/browser/src/core/user/tld.ts +65 -0
- package/packages/browser/src/core/user/vendor/crypto-es/LICENSE +53 -0
- package/packages/browser/src/core/user/vendor/crypto-es/lib/aes.ts +302 -0
- package/packages/browser/src/core/user/vendor/crypto-es/lib/cipher-core.ts +922 -0
- package/packages/browser/src/core/user/vendor/crypto-es/lib/core.ts +806 -0
- package/packages/browser/src/core/user/vendor/crypto-es/lib/enc-base64.ts +110 -0
- package/packages/browser/src/core/user/vendor/crypto-es/lib/evpkdf.ts +110 -0
- package/packages/browser/src/core/user/vendor/crypto-es/lib/md5.ts +238 -0
- package/packages/browser/src/core/user/vendor/readme.md +7 -0
- package/packages/browser/src/generated/__tests__/version.test.ts +18 -0
- package/packages/browser/src/generated/version.ts +2 -0
- package/packages/browser/src/index.ts +13 -0
- package/packages/browser/src/lib/__tests__/embedded-write-key.test.ts +15 -0
- package/packages/browser/src/lib/__tests__/fetch.test.ts +35 -0
- package/packages/browser/src/lib/__tests__/get-process-env.test.ts +5 -0
- package/packages/browser/src/lib/__tests__/group-by.test.ts +96 -0
- package/packages/browser/src/lib/__tests__/is-plan-event-enabled.test.ts +36 -0
- package/packages/browser/src/lib/__tests__/is-thenable.test.ts +39 -0
- package/packages/browser/src/lib/__tests__/merged-options.test.ts +123 -0
- package/packages/browser/src/lib/__tests__/on-page-change.test.ts +74 -0
- package/packages/browser/src/lib/__tests__/parse-cdn.test.ts +88 -0
- package/packages/browser/src/lib/__tests__/pick.test.ts +34 -0
- package/packages/browser/src/lib/__tests__/pick.typedef.ts +39 -0
- package/packages/browser/src/lib/bind-all.ts +19 -0
- package/packages/browser/src/lib/browser-polyfill.ts +23 -0
- package/packages/browser/src/lib/client-hints/__tests__/index.test.ts +66 -0
- package/packages/browser/src/lib/client-hints/index.ts +16 -0
- package/packages/browser/src/lib/client-hints/interfaces.ts +42 -0
- package/packages/browser/src/lib/create-deferred.ts +16 -0
- package/packages/browser/src/lib/csp-detection.ts +8 -0
- package/packages/browser/src/lib/embedded-write-key.ts +24 -0
- package/packages/browser/src/lib/fetch.ts +10 -0
- package/packages/browser/src/lib/get-global.ts +16 -0
- package/packages/browser/src/lib/get-process-env.ts +11 -0
- package/packages/browser/src/lib/global-analytics-helper.ts +31 -0
- package/packages/browser/src/lib/group-by.ts +30 -0
- package/packages/browser/src/lib/is-plan-event-enabled.ts +20 -0
- package/packages/browser/src/lib/is-thenable.ts +9 -0
- package/packages/browser/src/lib/load-script.ts +66 -0
- package/packages/browser/src/lib/merged-options.ts +46 -0
- package/packages/browser/src/lib/on-page-change.ts +29 -0
- package/packages/browser/src/lib/p-while.ts +12 -0
- package/packages/browser/src/lib/parse-cdn.ts +56 -0
- package/packages/browser/src/lib/pick.ts +28 -0
- package/packages/browser/src/lib/priority-queue/__tests__/backoff.test.ts +23 -0
- package/packages/browser/src/lib/priority-queue/__tests__/index.test.ts +158 -0
- package/packages/browser/src/lib/priority-queue/__tests__/persisted.test.ts +228 -0
- package/packages/browser/src/lib/priority-queue/backoff.ts +24 -0
- package/packages/browser/src/lib/priority-queue/index.ts +6 -0
- package/packages/browser/src/lib/priority-queue/persisted.ts +127 -0
- package/packages/browser/src/lib/sleep.ts +4 -0
- package/packages/browser/src/lib/to-facade.ts +53 -0
- package/packages/browser/src/lib/version-type.ts +10 -0
- package/packages/browser/src/node/__tests__/node-integration.test.ts +19 -0
- package/packages/browser/src/node/index.ts +36 -0
- package/packages/browser/src/node/node.browser.ts +7 -0
- package/packages/browser/src/plugins/ajs-destination/__tests__/index.test.ts +834 -0
- package/packages/browser/src/plugins/ajs-destination/index.ts +392 -0
- package/packages/browser/src/plugins/ajs-destination/loader.ts +129 -0
- package/packages/browser/src/plugins/ajs-destination/types.ts +44 -0
- package/packages/browser/src/plugins/ajs-destination/utils.ts +32 -0
- package/packages/browser/src/plugins/analytics-node/__tests__/index.test.ts +69 -0
- package/packages/browser/src/plugins/analytics-node/index.ts +67 -0
- package/packages/browser/src/plugins/env-enrichment/__tests__/index.test.ts +421 -0
- package/packages/browser/src/plugins/env-enrichment/index.ts +208 -0
- package/packages/browser/src/plugins/hightouchio/__tests__/batched-dispatcher.test.ts +299 -0
- package/packages/browser/src/plugins/hightouchio/__tests__/index.test.ts +317 -0
- package/packages/browser/src/plugins/hightouchio/__tests__/normalize.test.ts +181 -0
- package/packages/browser/src/plugins/hightouchio/__tests__/retries.test.ts +82 -0
- package/packages/browser/src/plugins/hightouchio/batched-dispatcher.ts +127 -0
- package/packages/browser/src/plugins/hightouchio/fetch-dispatcher.ts +27 -0
- package/packages/browser/src/plugins/hightouchio/index.ts +147 -0
- package/packages/browser/src/plugins/hightouchio/normalize.ts +71 -0
- package/packages/browser/src/plugins/hightouchio/schedule-flush.ts +58 -0
- package/packages/browser/src/plugins/legacy-video-plugins/__tests__/index.test.ts +48 -0
- package/packages/browser/src/plugins/legacy-video-plugins/index.ts +16 -0
- package/packages/browser/src/plugins/middleware/__tests__/index.test.ts +268 -0
- package/packages/browser/src/plugins/middleware/index.ts +131 -0
- package/packages/browser/src/plugins/remote-loader/__tests__/index.test.ts +943 -0
- package/packages/browser/src/plugins/remote-loader/index.ts +256 -0
- package/packages/browser/src/plugins/remote-middleware/__tests__/index.test.ts +116 -0
- package/packages/browser/src/plugins/remote-middleware/index.ts +44 -0
- package/packages/browser/src/plugins/routing-middleware/__tests__/index.test.ts +64 -0
- package/packages/browser/src/plugins/routing-middleware/index.ts +37 -0
- package/packages/browser/src/plugins/schema-filter/__tests__/index.test.ts +520 -0
- package/packages/browser/src/plugins/schema-filter/index.ts +90 -0
- package/packages/browser/src/plugins/validation/__tests__/index.test.ts +78 -0
- package/packages/browser/src/plugins/validation/index.ts +44 -0
- package/packages/browser/src/test-helpers/browser-storage.ts +75 -0
- package/packages/browser/src/test-helpers/factories.ts +18 -0
- package/packages/browser/src/test-helpers/fetch-parse.ts +8 -0
- package/packages/browser/src/test-helpers/fixtures/cdn-settings.ts +301 -0
- package/packages/browser/src/test-helpers/fixtures/classic-destination.ts +25 -0
- package/packages/browser/src/test-helpers/fixtures/client-hints.ts +28 -0
- package/packages/browser/src/test-helpers/fixtures/create-fetch-method.ts +30 -0
- package/packages/browser/src/test-helpers/fixtures/index.ts +4 -0
- package/packages/browser/src/test-helpers/fixtures/page-context.ts +11 -0
- package/packages/browser/src/test-helpers/test-writekeys.ts +5 -0
- package/packages/browser/src/test-helpers/type-assertions.ts +11 -0
- package/packages/browser/src/tester/__fixtures__/hightouch-snippet.ts +64 -0
- package/packages/browser/src/tester/__fixtures__/index.html +8 -0
- package/packages/browser/src/tester/ajs-perf.ts +30 -0
- package/packages/browser/src/tester/ajs-tester.ts +119 -0
- package/packages/browser/src/tester/server.js +16 -0
- package/packages/browser/tsconfig.build.json +9 -0
- package/packages/browser/tsconfig.json +13 -0
- package/packages/browser/webpack.config.js +106 -0
- package/packages/config/package.json +10 -0
- package/packages/config/src/index.js +4 -0
- package/packages/config/src/jest/config.js +50 -0
- package/packages/config/src/jest/get-module-map.js +34 -0
- package/packages/config/src/lint-staged/config.js +4 -0
- package/packages/config-webpack/package.json +20 -0
- package/packages/config-webpack/webpack.config.common.js +75 -0
- package/packages/consent/consent-tools/.eslintrc.js +7 -0
- package/packages/consent/consent-tools/.lintstagedrc.js +1 -0
- package/packages/consent/consent-tools/LICENSE +45 -0
- package/packages/consent/consent-tools/README.md +104 -0
- package/packages/consent/consent-tools/jest.config.js +6 -0
- package/packages/consent/consent-tools/jest.setup.js +4 -0
- package/packages/consent/consent-tools/package.json +48 -0
- package/packages/consent/consent-tools/src/domain/__tests__/assertions/integrations-assertions.ts +37 -0
- package/packages/consent/consent-tools/src/domain/__tests__/consent-stamping.test.ts +45 -0
- package/packages/consent/consent-tools/src/domain/__tests__/create-wrapper.test.ts +816 -0
- package/packages/consent/consent-tools/src/domain/__tests__/typedef-tests.ts +21 -0
- package/packages/consent/consent-tools/src/domain/consent-changed.ts +51 -0
- package/packages/consent/consent-tools/src/domain/consent-stamping.ts +19 -0
- package/packages/consent/consent-tools/src/domain/create-wrapper.ts +238 -0
- package/packages/consent/consent-tools/src/domain/get-initialized-analytics.ts +25 -0
- package/packages/consent/consent-tools/src/domain/load-cancellation.ts +31 -0
- package/packages/consent/consent-tools/src/domain/validation/__tests__/options-validators.test.ts +77 -0
- package/packages/consent/consent-tools/src/domain/validation/__tests__/validation-error.test.ts +15 -0
- package/packages/consent/consent-tools/src/domain/validation/common-validators.ts +19 -0
- package/packages/consent/consent-tools/src/domain/validation/index.ts +1 -0
- package/packages/consent/consent-tools/src/domain/validation/options-validators.ts +74 -0
- package/packages/consent/consent-tools/src/domain/validation/validation-error.ts +11 -0
- package/packages/consent/consent-tools/src/index.ts +16 -0
- package/packages/consent/consent-tools/src/types/errors.ts +14 -0
- package/packages/consent/consent-tools/src/types/index.ts +3 -0
- package/packages/consent/consent-tools/src/types/settings.ts +121 -0
- package/packages/consent/consent-tools/src/types/wrapper.ts +107 -0
- package/packages/consent/consent-tools/src/utils/index.ts +4 -0
- package/packages/consent/consent-tools/src/utils/pick.ts +18 -0
- package/packages/consent/consent-tools/src/utils/pipe.ts +14 -0
- package/packages/consent/consent-tools/src/utils/resolve-when.ts +32 -0
- package/packages/consent/consent-tools/src/utils/uniq.ts +4 -0
- package/packages/consent/consent-tools/tsconfig.build.json +9 -0
- package/packages/consent/consent-tools/tsconfig.json +12 -0
- package/packages/consent/consent-wrapper-onetrust/.eslintrc.js +7 -0
- package/packages/consent/consent-wrapper-onetrust/.lintstagedrc.js +1 -0
- package/packages/consent/consent-wrapper-onetrust/LICENSE +45 -0
- package/packages/consent/consent-wrapper-onetrust/README.md +125 -0
- package/packages/consent/consent-wrapper-onetrust/img/onetrust-cat-id.jpg +0 -0
- package/packages/consent/consent-wrapper-onetrust/img/onetrust-popup.jpg +0 -0
- package/packages/consent/consent-wrapper-onetrust/jest.config.js +6 -0
- package/packages/consent/consent-wrapper-onetrust/jest.setup.js +4 -0
- package/packages/consent/consent-wrapper-onetrust/package.json +60 -0
- package/packages/consent/consent-wrapper-onetrust/src/domain/__tests__/wrapper.test.ts +151 -0
- package/packages/consent/consent-wrapper-onetrust/src/domain/wrapper.ts +61 -0
- package/packages/consent/consent-wrapper-onetrust/src/index.ts +6 -0
- package/packages/consent/consent-wrapper-onetrust/src/index.umd.ts +11 -0
- package/packages/consent/consent-wrapper-onetrust/src/lib/__tests__/onetrust-api.test.ts +181 -0
- package/packages/consent/consent-wrapper-onetrust/src/lib/onetrust-api.ts +155 -0
- package/packages/consent/consent-wrapper-onetrust/src/lib/validation/index.ts +1 -0
- package/packages/consent/consent-wrapper-onetrust/src/lib/validation/onetrust-api-error.ts +11 -0
- package/packages/consent/consent-wrapper-onetrust/src/test-helpers/mocks.ts +23 -0
- package/packages/consent/consent-wrapper-onetrust/src/test-helpers/onetrust-globals.d.ts +11 -0
- package/packages/consent/consent-wrapper-onetrust/src/test-helpers/utils.ts +3 -0
- package/packages/consent/consent-wrapper-onetrust/tsconfig.build.json +9 -0
- package/packages/consent/consent-wrapper-onetrust/tsconfig.json +11 -0
- package/packages/consent/consent-wrapper-onetrust/webpack.config.js +25 -0
- package/packages/core/.eslintrc.js +4 -0
- package/packages/core/.lintstagedrc.js +1 -0
- package/packages/core/LICENSE.MD +45 -0
- package/packages/core/README.md +3 -0
- package/packages/core/jest.config.js +5 -0
- package/packages/core/jest.setup.js +10 -0
- package/packages/core/package.json +40 -0
- package/packages/core/src/analytics/__tests__/dispatch.test.ts +95 -0
- package/packages/core/src/analytics/dispatch.ts +58 -0
- package/packages/core/src/analytics/index.ts +11 -0
- package/packages/core/src/callback/__tests__/index.test.ts +85 -0
- package/packages/core/src/callback/index.ts +51 -0
- package/packages/core/src/context/index.ts +123 -0
- package/packages/core/src/emitter/__tests__/emitter.test.ts +74 -0
- package/packages/core/src/emitter/index.ts +65 -0
- package/packages/core/src/emitter/interface.ts +31 -0
- package/packages/core/src/events/__tests__/index.test.ts +394 -0
- package/packages/core/src/events/index.ts +280 -0
- package/packages/core/src/events/interfaces.ts +475 -0
- package/packages/core/src/index.ts +19 -0
- package/packages/core/src/logger/__tests__/index.test.ts +66 -0
- package/packages/core/src/logger/index.ts +74 -0
- package/packages/core/src/plugins/index.ts +43 -0
- package/packages/core/src/priority-queue/__tests__/backoff.test.ts +23 -0
- package/packages/core/src/priority-queue/__tests__/index.test.ts +158 -0
- package/packages/core/src/priority-queue/backoff.ts +24 -0
- package/packages/core/src/priority-queue/index.ts +103 -0
- package/packages/core/src/queue/__tests__/event-queue.test.ts +678 -0
- package/packages/core/src/queue/__tests__/extension-flushing.test.ts +416 -0
- package/packages/core/src/queue/delivery.ts +73 -0
- package/packages/core/src/queue/event-queue.ts +318 -0
- package/packages/core/src/stats/__tests__/index.test.ts +103 -0
- package/packages/core/src/stats/index.ts +88 -0
- package/packages/core/src/task/__tests__/task-group.test.ts +26 -0
- package/packages/core/src/task/task-group.ts +31 -0
- package/packages/core/src/user/index.ts +7 -0
- package/packages/core/src/utils/__tests__/group-by.test.ts +96 -0
- package/packages/core/src/utils/__tests__/is-plain-object.test.ts +27 -0
- package/packages/core/src/utils/__tests__/is-thenable.test.ts +39 -0
- package/packages/core/src/utils/bind-all.ts +19 -0
- package/packages/core/src/utils/get-global.ts +17 -0
- package/packages/core/src/utils/group-by.ts +30 -0
- package/packages/core/src/utils/has-properties.ts +7 -0
- package/packages/core/src/utils/is-plain-object.ts +26 -0
- package/packages/core/src/utils/is-thenable.ts +9 -0
- package/packages/core/src/utils/p-while.ts +12 -0
- package/packages/core/src/utils/pick.ts +8 -0
- package/packages/core/src/utils/ts-helpers.ts +13 -0
- package/packages/core/src/validation/__tests__/assertions.test.ts +155 -0
- package/packages/core/src/validation/assertions.ts +72 -0
- package/packages/core/src/validation/errors.ts +8 -0
- package/packages/core/src/validation/helpers.ts +23 -0
- package/packages/core/test-helpers/index.ts +2 -0
- package/packages/core/test-helpers/test-ctx.ts +7 -0
- package/packages/core/test-helpers/test-event-queue.ts +7 -0
- package/packages/core/tsconfig.build.json +9 -0
- package/packages/core/tsconfig.json +11 -0
- package/packages/node/.eslintrc.js +7 -0
- package/packages/node/.lintstagedrc.js +1 -0
- package/packages/node/LICENSE +45 -0
- package/packages/node/README.md +138 -0
- package/packages/node/jest.config.js +5 -0
- package/packages/node/jest.setup.js +4 -0
- package/packages/node/package.json +50 -0
- package/packages/node/scripts/version.sh +11 -0
- package/packages/node/src/__tests__/callback.test.ts +47 -0
- package/packages/node/src/__tests__/disable.integration.test.ts +42 -0
- package/packages/node/src/__tests__/emitter.integration.test.ts +45 -0
- package/packages/node/src/__tests__/graceful-shutdown-integration.test.ts +244 -0
- package/packages/node/src/__tests__/http-client.integration.test.ts +69 -0
- package/packages/node/src/__tests__/http-integration.test.ts +362 -0
- package/packages/node/src/__tests__/integration.test.ts +357 -0
- package/packages/node/src/__tests__/plugins.test.ts +16 -0
- package/packages/node/src/__tests__/settings.test.ts +9 -0
- package/packages/node/src/__tests__/test-helpers/assert-shape/http-request-event.ts +13 -0
- package/packages/node/src/__tests__/test-helpers/assert-shape/index.ts +2 -0
- package/packages/node/src/__tests__/test-helpers/assert-shape/segment-http-api.ts +43 -0
- package/packages/node/src/__tests__/test-helpers/create-test-analytics.ts +42 -0
- package/packages/node/src/__tests__/test-helpers/factories.ts +17 -0
- package/packages/node/src/__tests__/test-helpers/is-valid-date.ts +6 -0
- package/packages/node/src/__tests__/test-helpers/resolve-ctx.ts +19 -0
- package/packages/node/src/__tests__/test-helpers/resolve-emitter.ts +11 -0
- package/packages/node/src/__tests__/test-helpers/sleep.ts +3 -0
- package/packages/node/src/__tests__/test-helpers/test-plugin.ts +16 -0
- package/packages/node/src/__tests__/typedef-tests.ts +120 -0
- package/packages/node/src/app/analytics-node.ts +299 -0
- package/packages/node/src/app/context.ts +11 -0
- package/packages/node/src/app/dispatch-emit.ts +42 -0
- package/packages/node/src/app/emitter.ts +23 -0
- package/packages/node/src/app/event-factory.ts +20 -0
- package/packages/node/src/app/event-queue.ts +23 -0
- package/packages/node/src/app/settings.ts +49 -0
- package/packages/node/src/app/types/index.ts +3 -0
- package/packages/node/src/app/types/params.ts +76 -0
- package/packages/node/src/app/types/plugin.ts +5 -0
- package/packages/node/src/app/types/segment-event.ts +7 -0
- package/packages/node/src/generated/version.ts +2 -0
- package/packages/node/src/index.ts +26 -0
- package/packages/node/src/lib/__tests__/abort.test.ts +54 -0
- package/packages/node/src/lib/__tests__/create-url.test.ts +35 -0
- package/packages/node/src/lib/__tests__/env.test.ts +52 -0
- package/packages/node/src/lib/__tests__/get-message-id.test.ts +21 -0
- package/packages/node/src/lib/abort.ts +77 -0
- package/packages/node/src/lib/base-64-encode.ts +8 -0
- package/packages/node/src/lib/create-url.ts +11 -0
- package/packages/node/src/lib/env.ts +45 -0
- package/packages/node/src/lib/extract-promise-parts.ts +21 -0
- package/packages/node/src/lib/fetch.ts +16 -0
- package/packages/node/src/lib/get-message-id.ts +10 -0
- package/packages/node/src/lib/http-client.ts +95 -0
- package/packages/node/src/lib/uuid.ts +1 -0
- package/packages/node/src/plugins/segmentio/__tests__/methods.test.ts +223 -0
- package/packages/node/src/plugins/segmentio/__tests__/publisher.test.ts +411 -0
- package/packages/node/src/plugins/segmentio/context-batch.ts +71 -0
- package/packages/node/src/plugins/segmentio/index.ts +66 -0
- package/packages/node/src/plugins/segmentio/publisher.ts +265 -0
- package/packages/node/tsconfig.build.json +9 -0
- package/packages/node/tsconfig.json +10 -0
- package/packages/test-helpers/.eslintrc.js +7 -0
- package/packages/test-helpers/.lintstagedrc.js +1 -0
- package/packages/test-helpers/jest.config.js +3 -0
- package/packages/test-helpers/package.json +26 -0
- package/packages/test-helpers/src/analytics/cdn-settings-builder.ts +79 -0
- package/packages/test-helpers/src/analytics/index.ts +1 -0
- package/packages/test-helpers/src/index.ts +2 -0
- package/packages/test-helpers/src/utils/index.ts +1 -0
- package/packages/test-helpers/src/utils/sleep.ts +4 -0
- package/packages/test-helpers/tsconfig.build.json +9 -0
- package/packages/test-helpers/tsconfig.json +11 -0
- package/tsconfig.json +21 -0
- package/turbo.json +39 -0
- package/typings/get-monorepo-packages.d.ts +9 -0
- package/typings/spawn.d.ts +10 -0
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { Analytics } from '../core/analytics'
|
|
2
|
+
import { SerializedContext } from '../core/context'
|
|
3
|
+
import mem from 'micro-memoize'
|
|
4
|
+
import playwright from 'playwright'
|
|
5
|
+
|
|
6
|
+
type BrowserType = 'chromium' | 'firefox' | 'webkit'
|
|
7
|
+
|
|
8
|
+
// eslint-disable-next-line @typescript-eslint/explicit-function-return-type
|
|
9
|
+
function makeStub(page: playwright.Page) {
|
|
10
|
+
const stub = {
|
|
11
|
+
async register(
|
|
12
|
+
...args: Parameters<Analytics['register']>
|
|
13
|
+
): Promise<SerializedContext> {
|
|
14
|
+
return await page.evaluate((innerArgs) => {
|
|
15
|
+
return (
|
|
16
|
+
// @ts-ignore
|
|
17
|
+
window.htevents
|
|
18
|
+
.register(...innerArgs)
|
|
19
|
+
// @ts-ignore
|
|
20
|
+
.then((ctx) => ctx.toJSON())
|
|
21
|
+
)
|
|
22
|
+
}, args)
|
|
23
|
+
},
|
|
24
|
+
async track(
|
|
25
|
+
...args: Parameters<Analytics['track']>
|
|
26
|
+
): Promise<SerializedContext> {
|
|
27
|
+
// @ts-expect-error
|
|
28
|
+
const ctx = await page.evaluate((innerArgs) => {
|
|
29
|
+
// @ts-ignore
|
|
30
|
+
return window.htevents.track(...innerArgs).then((ctx) => {
|
|
31
|
+
return ctx.toJSON()
|
|
32
|
+
})
|
|
33
|
+
// @ts-ignore
|
|
34
|
+
}, args)
|
|
35
|
+
|
|
36
|
+
return ctx
|
|
37
|
+
},
|
|
38
|
+
async page(
|
|
39
|
+
...args: Parameters<Analytics['page']>
|
|
40
|
+
): Promise<SerializedContext> {
|
|
41
|
+
const ctx = await page.evaluate((innerArgs) => {
|
|
42
|
+
// @ts-ignore
|
|
43
|
+
return window.htevents.page(...innerArgs).then((ctx) => {
|
|
44
|
+
return ctx.toJSON()
|
|
45
|
+
})
|
|
46
|
+
// @ts-ignore
|
|
47
|
+
}, args)
|
|
48
|
+
|
|
49
|
+
return ctx
|
|
50
|
+
},
|
|
51
|
+
|
|
52
|
+
async identify(
|
|
53
|
+
...args: Parameters<Analytics['identify']>
|
|
54
|
+
): Promise<SerializedContext> {
|
|
55
|
+
const ctx = await page.evaluate((innerArgs) => {
|
|
56
|
+
// @ts-ignore
|
|
57
|
+
return window.htevents.identify(...innerArgs).then((ctx) => {
|
|
58
|
+
return ctx.toJSON()
|
|
59
|
+
})
|
|
60
|
+
// @ts-ignore
|
|
61
|
+
}, args)
|
|
62
|
+
|
|
63
|
+
return ctx
|
|
64
|
+
},
|
|
65
|
+
|
|
66
|
+
browserPage: page,
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
return stub
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
export const getBrowser = mem(
|
|
73
|
+
async (browserType?: BrowserType, remoteDebug?: boolean) => {
|
|
74
|
+
const browser = await playwright[browserType ?? 'chromium'].launch({
|
|
75
|
+
headless: true,
|
|
76
|
+
devtools: true,
|
|
77
|
+
args: [
|
|
78
|
+
'--no-sandbox',
|
|
79
|
+
'--disable-setuid-sandbox',
|
|
80
|
+
remoteDebug ? '--remote-debugging-port=9222' : '',
|
|
81
|
+
],
|
|
82
|
+
})
|
|
83
|
+
|
|
84
|
+
process.on('unhandledRejection', () => {
|
|
85
|
+
browser && browser.close()
|
|
86
|
+
})
|
|
87
|
+
|
|
88
|
+
return browser
|
|
89
|
+
}
|
|
90
|
+
)
|
|
91
|
+
|
|
92
|
+
export async function testerTeardown(): Promise<void> {
|
|
93
|
+
const browser = await getBrowser()
|
|
94
|
+
await browser.close()
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
export async function tester(
|
|
98
|
+
_writeKey: string,
|
|
99
|
+
url?: string,
|
|
100
|
+
browserType?: BrowserType,
|
|
101
|
+
remoteDebug?: boolean
|
|
102
|
+
): Promise<ReturnType<typeof makeStub>> {
|
|
103
|
+
const browser = await getBrowser(browserType, remoteDebug)
|
|
104
|
+
const page = await browser.newPage()
|
|
105
|
+
|
|
106
|
+
await page.goto(
|
|
107
|
+
url || `file://${process.cwd()}/src/tester/__fixtures__/index.html`
|
|
108
|
+
)
|
|
109
|
+
await page.evaluate(`
|
|
110
|
+
window.AnalyticsNext.HtEventsBrowser.load({
|
|
111
|
+
writeKey: '${_writeKey}',
|
|
112
|
+
}).then(loaded => {
|
|
113
|
+
window.htevents = loaded[0]
|
|
114
|
+
})
|
|
115
|
+
`)
|
|
116
|
+
|
|
117
|
+
await page.waitForFunction('window.htevents !== undefined')
|
|
118
|
+
return makeStub(page)
|
|
119
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
const path = require('path')
|
|
2
|
+
const express = require('express')
|
|
3
|
+
const port = 3001
|
|
4
|
+
|
|
5
|
+
const app = express()
|
|
6
|
+
|
|
7
|
+
app.get('*.js', function (req, res, next) {
|
|
8
|
+
req.url = req.url + '.gz'
|
|
9
|
+
res.set('Content-Encoding', 'gzip')
|
|
10
|
+
res.set('Content-Type', 'text/javascript')
|
|
11
|
+
next()
|
|
12
|
+
})
|
|
13
|
+
app.use('/', express.static(path.join(__dirname, '__fixtures__')))
|
|
14
|
+
app.use('/dist/umd', express.static(path.join(__dirname, '../../dist/umd')))
|
|
15
|
+
|
|
16
|
+
app.listen(port)
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
{
|
|
2
|
+
"extends": "../../tsconfig.json",
|
|
3
|
+
"compilerOptions": {
|
|
4
|
+
"module": "esnext",
|
|
5
|
+
"target": "ES5",
|
|
6
|
+
"moduleResolution": "node",
|
|
7
|
+
"resolveJsonModule": true,
|
|
8
|
+
"lib": ["es2020", "DOM", "DOM.Iterable"],
|
|
9
|
+
"baseUrl": "./src",
|
|
10
|
+
"keyofStringsOnly": true
|
|
11
|
+
},
|
|
12
|
+
"exclude": ["node_modules", "dist"]
|
|
13
|
+
}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
const path = require('path')
|
|
2
|
+
const webpack = require('webpack')
|
|
3
|
+
const TerserPlugin = require('terser-webpack-plugin')
|
|
4
|
+
const CompressionPlugin = require('compression-webpack-plugin')
|
|
5
|
+
const BundleAnalyzerPlugin =
|
|
6
|
+
require('webpack-bundle-analyzer').BundleAnalyzerPlugin
|
|
7
|
+
const CircularDependencyPlugin = require('circular-dependency-plugin')
|
|
8
|
+
|
|
9
|
+
const isProd = process.env.NODE_ENV === 'production'
|
|
10
|
+
// See release.js and pathPrefix / PATH_PREFIX
|
|
11
|
+
const PATH_PREFIX = process.env.PATH_PREFIX ?? 'browser/candidate'
|
|
12
|
+
const PATH_VERSION = process.env.PATH_VERSION ?? 'bundles'
|
|
13
|
+
const ASSET_PATH = isProd
|
|
14
|
+
? `https://cdn.hightouch-events.com/${PATH_PREFIX}/${PATH_VERSION}/`
|
|
15
|
+
: '/dist/umd/'
|
|
16
|
+
|
|
17
|
+
const plugins = [
|
|
18
|
+
new CompressionPlugin({}),
|
|
19
|
+
new webpack.EnvironmentPlugin({
|
|
20
|
+
ASSET_PATH,
|
|
21
|
+
PATH_PREFIX,
|
|
22
|
+
PATH_VERSION,
|
|
23
|
+
}),
|
|
24
|
+
new CircularDependencyPlugin({
|
|
25
|
+
failOnError: true,
|
|
26
|
+
}),
|
|
27
|
+
]
|
|
28
|
+
|
|
29
|
+
if (process.env.ANALYZE) {
|
|
30
|
+
plugins.push(new BundleAnalyzerPlugin())
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/** @type { import('webpack').Configuration } */
|
|
34
|
+
const config = {
|
|
35
|
+
stats: process.env.WATCH === 'true' ? 'errors-warnings' : 'normal',
|
|
36
|
+
node: {
|
|
37
|
+
global: false, // do not polyfill global object, we can use getGlobal function if needed.
|
|
38
|
+
},
|
|
39
|
+
mode: process.env.NODE_ENV || 'development',
|
|
40
|
+
devtool: 'source-map',
|
|
41
|
+
entry: {
|
|
42
|
+
index: {
|
|
43
|
+
import: path.resolve(__dirname, 'src/browser/browser-umd.ts'),
|
|
44
|
+
library: {
|
|
45
|
+
name: 'HtEvents',
|
|
46
|
+
type: 'umd',
|
|
47
|
+
},
|
|
48
|
+
},
|
|
49
|
+
'events.min': {
|
|
50
|
+
import: path.resolve(__dirname, 'src/browser/standalone.ts'),
|
|
51
|
+
library: {
|
|
52
|
+
name: 'HtEvents',
|
|
53
|
+
type: 'window',
|
|
54
|
+
},
|
|
55
|
+
},
|
|
56
|
+
},
|
|
57
|
+
output: {
|
|
58
|
+
publicPath: '', // Hack - we're overriding publicPath but IE needs this set or it won't load.
|
|
59
|
+
filename: '[name].js',
|
|
60
|
+
path: path.resolve(__dirname, 'dist/umd'),
|
|
61
|
+
chunkFilename: '[name].bundle.[contenthash].js',
|
|
62
|
+
},
|
|
63
|
+
target: ['web', 'es5'],
|
|
64
|
+
module: {
|
|
65
|
+
rules: [
|
|
66
|
+
{
|
|
67
|
+
test: /\.tsx?$/,
|
|
68
|
+
use: [
|
|
69
|
+
{
|
|
70
|
+
loader: 'ts-loader',
|
|
71
|
+
options: {
|
|
72
|
+
configFile: 'tsconfig.build.json',
|
|
73
|
+
transpileOnly: true,
|
|
74
|
+
},
|
|
75
|
+
},
|
|
76
|
+
],
|
|
77
|
+
},
|
|
78
|
+
],
|
|
79
|
+
},
|
|
80
|
+
resolve: {
|
|
81
|
+
extensions: ['.ts', '.js'],
|
|
82
|
+
},
|
|
83
|
+
devServer: {
|
|
84
|
+
contentBase: path.resolve(__dirname, 'dist/umd'),
|
|
85
|
+
},
|
|
86
|
+
optimization: {
|
|
87
|
+
moduleIds: 'deterministic',
|
|
88
|
+
minimize: isProd,
|
|
89
|
+
minimizer: [
|
|
90
|
+
new TerserPlugin({
|
|
91
|
+
extractComments: false,
|
|
92
|
+
terserOptions: {
|
|
93
|
+
ecma: '2015',
|
|
94
|
+
mangle: true,
|
|
95
|
+
compress: true,
|
|
96
|
+
output: {
|
|
97
|
+
comments: false,
|
|
98
|
+
},
|
|
99
|
+
},
|
|
100
|
+
}),
|
|
101
|
+
],
|
|
102
|
+
},
|
|
103
|
+
plugins,
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
module.exports = config
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
const { getJestModuleMap } = require('./get-module-map')
|
|
2
|
+
const path = require('path')
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Create Config
|
|
6
|
+
* @param {string} dirname - __dirname from the package that's importing this config.
|
|
7
|
+
* @param {import('jest').Config} Overrides.
|
|
8
|
+
* @returns {import('jest').Config}
|
|
9
|
+
*/
|
|
10
|
+
const createJestTSConfig = (
|
|
11
|
+
dirname,
|
|
12
|
+
{ modulePathIgnorePatterns, testMatch, ...overridesToMerge } = {}
|
|
13
|
+
) => {
|
|
14
|
+
if (typeof dirname !== 'string') {
|
|
15
|
+
throw new Error('Please pass __dirname as the first argument.')
|
|
16
|
+
}
|
|
17
|
+
const isRootConfig = dirname === process.cwd()
|
|
18
|
+
const moduleMap = getJestModuleMap(dirname, isRootConfig)
|
|
19
|
+
return {
|
|
20
|
+
...(isRootConfig ? {} : { displayName: path.basename(process.cwd()) }),
|
|
21
|
+
/**
|
|
22
|
+
* No need to manually run yarn build all the time.
|
|
23
|
+
* This resolve packages for ts-jest so typescript compilation happens in-memory.
|
|
24
|
+
*/
|
|
25
|
+
moduleNameMapper: moduleMap,
|
|
26
|
+
preset: 'ts-jest',
|
|
27
|
+
modulePathIgnorePatterns: [
|
|
28
|
+
'<rootDir>/dist/',
|
|
29
|
+
...(modulePathIgnorePatterns || []),
|
|
30
|
+
],
|
|
31
|
+
testEnvironment: 'node',
|
|
32
|
+
testMatch: ['**/?(*.)+(test).[jt]s?(x)', ...(testMatch || [])],
|
|
33
|
+
/**
|
|
34
|
+
* No need to call jest.clearAllMocks() or jest.resetMocks() manually.
|
|
35
|
+
* Automatically clear mock calls, instances and results before every test.
|
|
36
|
+
* Equivalent to calling jest.clearAllMocks() before each test.
|
|
37
|
+
*/
|
|
38
|
+
clearMocks: true,
|
|
39
|
+
globals: {
|
|
40
|
+
'ts-jest': {
|
|
41
|
+
isolatedModules: true,
|
|
42
|
+
},
|
|
43
|
+
},
|
|
44
|
+
...(overridesToMerge || {}),
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
module.exports = {
|
|
49
|
+
createJestTSConfig,
|
|
50
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
const getPackages = require('get-monorepo-packages')
|
|
2
|
+
const appRootPath = require('app-root-path')
|
|
3
|
+
const path = require('path')
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Create module mapping that resolve packages for ts-jest so typescript compilation happens in-memory
|
|
7
|
+
*/
|
|
8
|
+
const getJestModuleMap = (configDirname, isRootConfig) => {
|
|
9
|
+
// for the sake of getPackages working correctly during a project-wide test run, the working directory must be hardcoded to the root
|
|
10
|
+
const packageRoot = isRootConfig
|
|
11
|
+
? '.'
|
|
12
|
+
: path.relative(configDirname, appRootPath.path)
|
|
13
|
+
|
|
14
|
+
const packages = getPackages(configDirname, packageRoot)
|
|
15
|
+
|
|
16
|
+
const createPackageMappedPath = (packagePath) => {
|
|
17
|
+
const pathToMappedPackage = path.relative(configDirname, packagePath)
|
|
18
|
+
// alert: yes, this _does_ expect all modules to be in src, and it's completely ignorant of export maps.
|
|
19
|
+
const result = `<rootDir>/${pathToMappedPackage}/src/$1`
|
|
20
|
+
return result
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
const moduleMap = packages.reduce(
|
|
24
|
+
(acc, pkg) => ({
|
|
25
|
+
...acc,
|
|
26
|
+
[`${pkg.package.name}(.*)$`]: createPackageMappedPath(pkg.location),
|
|
27
|
+
}),
|
|
28
|
+
{}
|
|
29
|
+
)
|
|
30
|
+
|
|
31
|
+
return moduleMap
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
module.exports = { getJestModuleMap }
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@internal/config-webpack",
|
|
3
|
+
"version": "0.0.0",
|
|
4
|
+
"private": true,
|
|
5
|
+
"packageManager": "yarn@3.4.1",
|
|
6
|
+
"devDependencies": {
|
|
7
|
+
"@babel/cli": "^7.22.10",
|
|
8
|
+
"@babel/core": "^7.22.11",
|
|
9
|
+
"@babel/preset-env": "^7.22.10",
|
|
10
|
+
"@babel/preset-typescript": "^7.22.11",
|
|
11
|
+
"@types/circular-dependency-plugin": "^5",
|
|
12
|
+
"babel-loader": "^8.0.0",
|
|
13
|
+
"circular-dependency-plugin": "^5.2.2",
|
|
14
|
+
"ecma-version-validator-webpack-plugin": "^1.2.1",
|
|
15
|
+
"terser-webpack-plugin": "^5.1.4",
|
|
16
|
+
"webpack": "^5.76.0",
|
|
17
|
+
"webpack-cli": "^4.8.0",
|
|
18
|
+
"webpack-merge": "^5.9.0"
|
|
19
|
+
}
|
|
20
|
+
}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
const TerserPlugin = require('terser-webpack-plugin')
|
|
2
|
+
const CircularDependencyPlugin = require('circular-dependency-plugin')
|
|
3
|
+
const {
|
|
4
|
+
ECMAVersionValidatorPlugin,
|
|
5
|
+
} = require('ecma-version-validator-webpack-plugin')
|
|
6
|
+
|
|
7
|
+
const isProd = process.env.NODE_ENV === 'production'
|
|
8
|
+
const isWatch = process.env.WATCH === 'true'
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* This is a base webpack config that is used for all generic web packages.
|
|
12
|
+
* It should contain the same support as analytics.js (e.g. es5, minified, etc)
|
|
13
|
+
*
|
|
14
|
+
*
|
|
15
|
+
* @type { import('webpack').Configuration }
|
|
16
|
+
*/
|
|
17
|
+
module.exports = {
|
|
18
|
+
devtool: 'source-map',
|
|
19
|
+
stats: isWatch ? 'errors-warnings' : 'normal',
|
|
20
|
+
mode: isProd ? 'production' : 'development',
|
|
21
|
+
target: ['web', 'es5'], // target es5 for ie11 support (generates module boilerplate in es5)
|
|
22
|
+
module: {
|
|
23
|
+
rules: [
|
|
24
|
+
{
|
|
25
|
+
test: /\.(ts|js)$/,
|
|
26
|
+
use: [
|
|
27
|
+
{
|
|
28
|
+
loader: 'babel-loader',
|
|
29
|
+
options: {
|
|
30
|
+
presets: [
|
|
31
|
+
['@babel/preset-typescript'],
|
|
32
|
+
[
|
|
33
|
+
'@babel/preset-env',
|
|
34
|
+
{
|
|
35
|
+
targets: {
|
|
36
|
+
ie: 11,
|
|
37
|
+
},
|
|
38
|
+
},
|
|
39
|
+
],
|
|
40
|
+
],
|
|
41
|
+
},
|
|
42
|
+
},
|
|
43
|
+
],
|
|
44
|
+
},
|
|
45
|
+
],
|
|
46
|
+
},
|
|
47
|
+
optimization: {
|
|
48
|
+
moduleIds: 'deterministic',
|
|
49
|
+
minimize: isProd,
|
|
50
|
+
minimizer: [
|
|
51
|
+
new TerserPlugin({
|
|
52
|
+
extractComments: false,
|
|
53
|
+
terserOptions: {
|
|
54
|
+
// not sure why, if we target es5, we can set ecma to 2015 here without breaking ie11.
|
|
55
|
+
// this from the original webpack config had that netto set up, so leaving it as is.
|
|
56
|
+
ecma: '2015',
|
|
57
|
+
mangle: true,
|
|
58
|
+
compress: true,
|
|
59
|
+
output: {
|
|
60
|
+
comments: false,
|
|
61
|
+
},
|
|
62
|
+
},
|
|
63
|
+
}),
|
|
64
|
+
],
|
|
65
|
+
},
|
|
66
|
+
resolve: {
|
|
67
|
+
extensions: ['.ts', '.js'],
|
|
68
|
+
},
|
|
69
|
+
plugins: [
|
|
70
|
+
new CircularDependencyPlugin({
|
|
71
|
+
failOnError: true,
|
|
72
|
+
}),
|
|
73
|
+
new ECMAVersionValidatorPlugin({ ecmaVersion: 5 }), // ensure our js bundle only contains syntax supported in ie11. This does not check polyfills.
|
|
74
|
+
],
|
|
75
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
module.exports = require("@internal/config").lintStagedConfig
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
The MIT License (MIT)
|
|
2
|
+
|
|
3
|
+
Copyright © 2023 Hightouch
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in
|
|
13
|
+
all copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
21
|
+
THE SOFTWARE.
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
The MIT License (MIT)
|
|
26
|
+
|
|
27
|
+
Copyright © 2023 Segment
|
|
28
|
+
|
|
29
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
30
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
31
|
+
in the Software without restriction, including without limitation the rights
|
|
32
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
33
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
34
|
+
furnished to do so, subject to the following conditions:
|
|
35
|
+
|
|
36
|
+
The above copyright notice and this permission notice shall be included in
|
|
37
|
+
all copies or substantial portions of the Software.
|
|
38
|
+
|
|
39
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
40
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
41
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
42
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
43
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
44
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
45
|
+
THE SOFTWARE.
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
# @ht-sdks/events-sdk-js-consent-tools
|
|
2
|
+
|
|
3
|
+
## Quick Start
|
|
4
|
+
|
|
5
|
+
```ts
|
|
6
|
+
// wrapper.js
|
|
7
|
+
import { createWrapper, resolveWhen } from '@ht-sdks/events-sdk-js-consent-tools'
|
|
8
|
+
|
|
9
|
+
export const withCMP = createWrapper({
|
|
10
|
+
|
|
11
|
+
// Wrapper waits to load hightouch / get categories until this function returns / resolves
|
|
12
|
+
shouldLoad: async (ctx) => {
|
|
13
|
+
const CMP = await getCMP()
|
|
14
|
+
await resolveWhen(
|
|
15
|
+
() => !CMP.popUpVisible(),
|
|
16
|
+
500
|
|
17
|
+
)
|
|
18
|
+
|
|
19
|
+
// Optional -- for granular control of initialization
|
|
20
|
+
if (noConsentNeeded) {
|
|
21
|
+
ctx.abort({ loadHightouchNormally: true })
|
|
22
|
+
} else if (allTrackingDisabled) {
|
|
23
|
+
ctx.abort({ loadHightouchNormally: false })
|
|
24
|
+
}
|
|
25
|
+
},
|
|
26
|
+
|
|
27
|
+
getCategories: async () => {
|
|
28
|
+
const CMP = await getCMP()
|
|
29
|
+
return normalizeCategories(CMP.consentedCategories()) // Expected format: { foo: true, bar: false }
|
|
30
|
+
},
|
|
31
|
+
|
|
32
|
+
registerOnConsentChanged: async (setCategories) => {
|
|
33
|
+
const CMP = await getCMP()
|
|
34
|
+
CMP.onConsentChanged((event) => {
|
|
35
|
+
setCategories(normalizeCategories(event.detail))
|
|
36
|
+
})
|
|
37
|
+
},
|
|
38
|
+
})
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
const getCMP = async () => {
|
|
42
|
+
await resolveWhen(() => window.CMP !== undefined, 500)
|
|
43
|
+
return window.CMP
|
|
44
|
+
}
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
## Wrapper Usage API
|
|
48
|
+
|
|
49
|
+
## `npm`
|
|
50
|
+
|
|
51
|
+
```js
|
|
52
|
+
import { withCMP } from './wrapper'
|
|
53
|
+
import { HtEventsBrowser } from '@ht-sdks/events-sdk-js-browser'
|
|
54
|
+
|
|
55
|
+
export const htevents = new HtEventsBrowser()
|
|
56
|
+
|
|
57
|
+
withCMP(htevents).load({
|
|
58
|
+
writeKey: '<MY_WRITE_KEY'>
|
|
59
|
+
})
|
|
60
|
+
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
## Snippet users (window.htevents)
|
|
64
|
+
### Note: This assumes a project that can consume the library via es6 imports, using a like Webpack.
|
|
65
|
+
|
|
66
|
+
1. Delete the `htevents.load()` line from the snippet
|
|
67
|
+
|
|
68
|
+
```diff
|
|
69
|
+
- htevents.load("<MY_WRITE_KEY>");
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
2. Import Analytics
|
|
73
|
+
|
|
74
|
+
```js
|
|
75
|
+
import { withCMP } from './wrapper'
|
|
76
|
+
|
|
77
|
+
withCMP(window.htevents).load('<MY_WRITE_KEY')
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
## Wrapper Examples
|
|
81
|
+
|
|
82
|
+
- [OneTrust](../consent-wrapper-onetrust) (beta)
|
|
83
|
+
|
|
84
|
+
## Settings / Options / Configuration
|
|
85
|
+
|
|
86
|
+
See the complete list of settings in the **[Settings interface](src/types/settings.ts)**
|
|
87
|
+
|
|
88
|
+
## Special Requirements
|
|
89
|
+
|
|
90
|
+
- For npm users, this library expects a version of `@ht-sdks/events-sdk-js-browser` >= **1.53.1**. Note: If your library depends on this library, you should have the appropriate peer dependency declaration. See our `package.json` for an example.
|
|
91
|
+
|
|
92
|
+
## Development
|
|
93
|
+
|
|
94
|
+
1. Build this package + all dependencies
|
|
95
|
+
|
|
96
|
+
```sh
|
|
97
|
+
yarn . build
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
2. Run tests
|
|
101
|
+
|
|
102
|
+
```
|
|
103
|
+
yarn test
|
|
104
|
+
```
|