Skip to content

Conversation

@seansica
Copy link
Contributor

@seansica seansica commented Apr 9, 2025

This change enables the TypeScript project to be emitted to both CJS and ESM to support a broader range of downstream environment types.

Example tsup execution:

❯ npx tsup src --format esm,cjs
CLI Building entry: src/index.ts, src/main.ts, src/classes/attack-data-model.ts, src/classes/index.ts, src/classes/utils.ts, src/data-sources/data-source-registration.ts, src/data-sources/fetch-attack-versions.ts, src/data-sources/index.ts, src/errors/custom-error-map.ts, src/errors/index.ts, src/schemas/index.ts, src/classes/common/attack-object.impl.ts, src/classes/common/index.ts, src/classes/sdo/asset.impl.ts, src/classes/sdo/campaign.impl.ts, src/classes/sdo/collection.impl.ts, src/classes/sdo/data-component.impl.ts, src/classes/sdo/data-source.impl.ts, src/classes/sdo/group.impl.ts, src/classes/sdo/identity.impl.ts, src/classes/sdo/index.ts, src/classes/sdo/malware.impl.ts, src/classes/sdo/matrix.impl.ts, src/classes/sdo/mitigation.impl.ts, src/classes/sdo/tactic.impl.ts, src/classes/sdo/technique.impl.ts, src/classes/sdo/tool.impl.ts, src/classes/smo/index.ts, src/classes/smo/marking-definition.impl.ts, src/schemas/smo/index.ts, src/schemas/smo/marking-definition.schema.ts, src/schemas/common/attack-base-object.ts, src/schemas/common/common-properties.ts, src/schemas/common/index.ts, src/schemas/common/misc.ts, src/schemas/common/open-vocabulary.ts, src/schemas/common/stix-core.ts, src/schemas/common/stix-identifier.ts, src/schemas/common/stix-spec-version.ts, src/schemas/common/stix-timestamp.ts, src/schemas/common/stix-type.ts, src/classes/sro/index.ts, src/classes/sro/relationship.impl.ts, src/schemas/sdo/asset.schema.ts, src/schemas/sdo/campaign.schema.ts, src/schemas/sdo/collection.schema.ts, src/schemas/sdo/data-component.schema.ts, src/schemas/sdo/data-source.schema.ts, src/schemas/sdo/group.schema.ts, src/schemas/sdo/identity.schema.ts, src/schemas/sdo/index.ts, src/schemas/sdo/malware.schema.ts, src/schemas/sdo/matrix.schema.ts, src/schemas/sdo/mitigation.schema.ts, src/schemas/sdo/software.schema.ts, src/schemas/sdo/stix-bundle.schema.ts, src/schemas/sdo/tactic.schema.ts, src/schemas/sdo/technique.schema.ts, src/schemas/sdo/tool.schema.ts, src/schemas/sro/index.ts, src/schemas/sro/relationship.schema.ts
CLI Using tsconfig: tsconfig.json
CLI tsup v8.4.0
CLI Target: es2020
ESM Build start
CJS Build start
ESM dist/chunk-ZLHEXSCV.js                        0 B
ESM dist/chunk-4CPYBNM3.js                        0 B
ESM dist/chunk-BVLTOUXM.js                        0 B
ESM dist/chunk-CT5C7ADA.js                        0 B
ESM dist/chunk-YP6V5IG5.js                        0 B
ESM dist/chunk-2PRKBCWR.js                        0 B
ESM dist/chunk-ALL2HTCJ.js                        0 B
ESM dist/chunk-RJFULP3T.js                        0 B
ESM dist/chunk-PKC2N3TD.js                        0 B
ESM dist/chunk-QH5EHOBU.js                        0 B
ESM dist/index.js                                 7.47 KB
ESM dist/chunk-EK6EXQR2.js                        9.53 KB
ESM dist/chunk-SY46FJ4G.js                        3.17 KB
ESM dist/chunk-7TR3C3HX.js                        2.20 KB
ESM dist/chunk-4USQZYST.js                        1.94 KB
ESM dist/chunk-RWHWDPXX.js                        10.41 KB
ESM dist/chunk-OR52K66U.js                        2.77 KB
ESM dist/chunk-KJ2C3ST6.js                        4.50 KB
ESM dist/chunk-QX26LKTF.js                        1.71 KB
ESM dist/main.js                                  1.71 KB
ESM dist/chunk-SRFCUTLW.js                        1.43 KB
ESM dist/chunk-227XOH66.js                        1.62 KB
ESM dist/chunk-ELQL2S6C.js                        3.27 KB
ESM dist/chunk-S6PTSJXU.js                        1.21 KB
ESM dist/chunk-DGF3XQMZ.js                        2.15 KB
ESM dist/chunk-BW7NSGL7.js                        1.36 KB
ESM dist/chunk-FKMGXZUU.js                        6.26 KB
ESM dist/chunk-WF6JD7HX.js                        5.92 KB
ESM dist/chunk-FFB2YEHT.js                        2.37 KB
ESM dist/chunk-I23U55RZ.js                        626.00 B
ESM dist/chunk-JTLI5L6C.js                        6.43 KB
ESM dist/chunk-5FTVQX5U.js                        3.60 KB
ESM dist/chunk-PDYRKM2X.js                        4.08 KB
ESM dist/chunk-RHBJZUEE.js                        1.82 KB
ESM dist/chunk-Q47ULSOA.js                        625.00 B
ESM dist/chunk-DMW7IVTK.js                        1.03 KB
ESM dist/chunk-M5Z5D4DC.js                        1.20 KB
ESM dist/chunk-EW7WHHYL.js                        1.53 KB
ESM dist/chunk-W2YOUMVK.js                        346.00 B
ESM dist/chunk-YTLXS4H5.js                        268.00 B
ESM dist/chunk-4RYLCAD6.js                        310.00 B
ESM dist/chunk-5TY6GUSK.js                        1.58 KB
ESM dist/chunk-BVJE73TW.js                        455.00 B
ESM dist/chunk-BG2COBEQ.js                        479.00 B
ESM dist/chunk-U4SUBVE6.js                        517.00 B
ESM dist/chunk-XMFYQH5E.js                        2.08 KB
ESM dist/chunk-3Z75KXCP.js                        268.00 B
ESM dist/chunk-V343NNBE.js                        282.00 B
ESM dist/chunk-25IKECBY.js                        1.89 KB
ESM dist/chunk-7N3QFRBA.js                        8.41 KB
ESM dist/chunk-R4ISNN3D.js                        296.00 B
ESM dist/chunk-PTQ33YNX.js                        2.52 KB
ESM dist/chunk-DOT5VTFS.js                        1.84 KB
ESM dist/chunk-2N7H7TEP.js                        391.00 B
ESM dist/chunk-MFM4HCY4.js                        877.00 B
ESM dist/chunk-UVFRWXP3.js                        297.00 B
ESM dist/chunk-6IMNEOJJ.js                        296.00 B
ESM dist/classes/sro/relationship.impl.js         127.00 B
ESM dist/schemas/sdo/tactic.schema.js             543.00 B
ESM dist/schemas/sro/relationship.schema.js       715.00 B
ESM dist/classes/sdo/tactic.impl.js               115.00 B
ESM dist/classes/smo/index.js                     171.00 B
ESM dist/schemas/smo/index.js                     859.00 B
ESM dist/errors/custom-error-map.js               86.00 B
ESM dist/data-sources/data-source-registration.js 1.73 KB
ESM dist/classes/common/attack-object.impl.js     89.00 B
ESM dist/schemas/common/stix-type.js              89.00 B
ESM dist/schemas/sdo/technique.schema.js          1.07 KB
ESM dist/schemas/sdo/identity.schema.js           463.00 B
ESM dist/schemas/sdo/index.js                     2.98 KB
ESM dist/schemas/sdo/tool.schema.js               523.00 B
ESM dist/schemas/sdo/malware.schema.js            601.00 B
ESM dist/schemas/sdo/group.schema.js              423.00 B
ESM dist/schemas/sdo/software.schema.js           497.00 B
ESM dist/schemas/sdo/matrix.schema.js             477.00 B
ESM dist/schemas/sdo/mitigation.schema.js         501.00 B
ESM dist/schemas/sdo/campaign.schema.js           627.00 B
ESM dist/schemas/sdo/collection.schema.js         545.00 B
ESM dist/schemas/sdo/asset.schema.js              627.00 B
ESM dist/schemas/sro/index.js                     749.00 B
ESM dist/schemas/sdo/stix-bundle.schema.js        1.11 KB
ESM dist/schemas/common/stix-core.js              373.00 B
ESM dist/schemas/sdo/data-component.schema.js     497.00 B
ESM dist/schemas/common/common-properties.js      915.00 B
ESM dist/schemas/common/stix-spec-version.js      103.00 B
ESM dist/schemas/common/stix-identifier.js        195.00 B
ESM dist/classes/sro/index.js                     127.00 B
ESM dist/schemas/common/misc.js                   411.00 B
ESM dist/schemas/common/open-vocabulary.js        669.00 B
ESM dist/classes/sdo/tool.impl.js                 281.00 B
ESM dist/classes/sdo/data-component.impl.js       265.00 B
ESM dist/schemas/common/index.js                  2.59 KB
ESM dist/classes/sdo/identity.impl.js             119.00 B
ESM dist/classes/sdo/data-source.impl.js          123.00 B
ESM dist/classes/sdo/group.impl.js                351.00 B
ESM dist/schemas/common/attack-base-object.js     343.00 B
ESM dist/classes/sdo/index.js                     951.00 B
ESM dist/classes/sdo/matrix.impl.js               115.00 B
ESM dist/classes/sdo/technique.impl.js            257.00 B
ESM dist/schemas/common/stix-timestamp.js         221.00 B
ESM dist/schemas/sdo/data-source.schema.js        497.00 B
ESM dist/classes/sdo/mitigation.impl.js           123.00 B
ESM dist/classes/smo/marking-definition.impl.js   137.00 B
ESM dist/classes/sdo/asset.impl.js                113.00 B
ESM dist/errors/index.js                          62.00 B
ESM dist/classes/sdo/collection.impl.js           123.00 B
ESM dist/schemas/index.js                         5.92 KB
ESM dist/classes/sdo/campaign.impl.js             357.00 B
ESM dist/classes/index.js                         1.42 KB
ESM dist/classes/common/index.js                  123.00 B
ESM dist/classes/attack-data-model.js             522.00 B
ESM dist/data-sources/fetch-attack-versions.js    96.00 B
ESM dist/classes/utils.js                         346.00 B
ESM dist/classes/sdo/malware.impl.js              287.00 B
ESM dist/data-sources/index.js                    1.73 KB
ESM dist/schemas/smo/marking-definition.schema.js 825.00 B
ESM ⚡️ Build success in 83ms
CJS dist/classes/attack-data-model.cjs             15.36 KB
CJS dist/data-sources/data-source-registration.cjs 74.20 KB
CJS dist/classes/utils.cjs                         3.84 KB
CJS dist/data-sources/index.cjs                    74.15 KB
CJS dist/data-sources/fetch-attack-versions.cjs    1.91 KB
CJS dist/errors/index.cjs                          1.55 KB
CJS dist/classes/common/attack-object.impl.cjs     1.41 KB
CJS dist/errors/custom-error-map.cjs               2.59 KB
CJS dist/classes/index.cjs                         18.01 KB
CJS dist/classes/common/index.cjs                  1.41 KB
CJS dist/schemas/index.cjs                         77.65 KB
CJS dist/classes/sdo/campaign.impl.cjs             2.16 KB
CJS dist/index.cjs                                 104.76 KB
CJS dist/classes/sdo/data-component.impl.cjs       1.94 KB
CJS dist/classes/sdo/group.impl.cjs                2.14 KB
CJS dist/classes/sdo/malware.impl.cjs              1.81 KB
CJS dist/classes/sdo/tactic.impl.cjs               1.60 KB
CJS dist/classes/sdo/index.cjs                     7.77 KB
CJS dist/classes/sdo/asset.impl.cjs                1.83 KB
CJS dist/classes/sdo/mitigation.impl.cjs           1.65 KB
CJS dist/classes/smo/index.cjs                     1.67 KB
CJS dist/classes/smo/marking-definition.impl.cjs   1.74 KB
CJS dist/schemas/smo/index.cjs                     23.95 KB
CJS dist/classes/sdo/tool.impl.cjs                 1.77 KB
CJS dist/schemas/smo/marking-definition.schema.cjs 23.98 KB
CJS dist/classes/sdo/technique.impl.cjs            2.92 KB
CJS dist/classes/sdo/identity.impl.cjs             1.62 KB
CJS dist/schemas/common/common-properties.cjs      11.06 KB
CJS dist/schemas/common/attack-base-object.cjs     16.11 KB
CJS dist/schemas/common/misc.cjs                   6.01 KB
CJS dist/schemas/common/open-vocabulary.cjs        5.32 KB
CJS dist/schemas/common/stix-core.cjs              15.76 KB
CJS dist/main.cjs                                  91.52 KB
CJS dist/schemas/common/index.cjs                  22.86 KB
CJS dist/schemas/common/stix-type.cjs              2.05 KB
CJS dist/classes/sdo/data-source.impl.cjs          1.65 KB
CJS dist/schemas/sdo/collection.schema.cjs         21.41 KB
CJS dist/schemas/common/stix-spec-version.cjs      1.67 KB
CJS dist/classes/sro/relationship.impl.cjs         1.67 KB
CJS dist/schemas/sdo/data-component.schema.cjs     20.43 KB
CJS dist/schemas/sdo/data-source.schema.cjs        21.56 KB
CJS dist/schemas/sdo/asset.schema.cjs              24.11 KB
CJS dist/schemas/sdo/group.schema.cjs              21.82 KB
CJS dist/schemas/sdo/campaign.schema.cjs           26.68 KB
CJS dist/schemas/sdo/identity.schema.cjs           22.46 KB
CJS dist/classes/sro/index.cjs                     1.62 KB
CJS dist/classes/sdo/matrix.impl.cjs               1.60 KB
CJS dist/schemas/sdo/software.schema.cjs           22.15 KB
CJS dist/schemas/common/stix-identifier.cjs        3.99 KB
CJS dist/schemas/sdo/mitigation.schema.cjs         22.32 KB
CJS dist/schemas/sdo/index.cjs                     73.16 KB
CJS dist/schemas/sdo/matrix.schema.cjs             20.51 KB
CJS dist/schemas/sdo/technique.schema.cjs          31.95 KB
CJS dist/schemas/sdo/tool.schema.cjs               23.84 KB
CJS dist/schemas/sdo/malware.schema.cjs            26.41 KB
CJS dist/schemas/sro/index.cjs                     27.14 KB
CJS dist/classes/sdo/collection.impl.cjs           1.65 KB
CJS dist/schemas/sro/relationship.schema.cjs       27.16 KB
CJS dist/schemas/sdo/tactic.schema.cjs             23.89 KB
CJS dist/schemas/common/stix-timestamp.cjs         2.38 KB
CJS dist/schemas/sdo/stix-bundle.schema.cjs        70.44 KB
CJS ⚡️ Build success in 92ms

I tested the compiled app in an ESM project and a CJS project:

.
├── cjs-test
│   ├── index.js
│   ├── node_modules
│   │   └── @mitre-attack
│   │       └── attack-data-model -> ../../../../../attack/attack-data-model
│   └── package.json
└── esm-test
    ├── index.js
    ├── node_modules
    │   └── @mitre-attack
    │       └── attack-data-model -> ../../../../../attack/attack-data-model
    ├── package-lock.json
    └── package.json

The scripts used to verify ESM and CJS support are included in docs/USAGE.md—here is their output:

❯ npm run start

> cjs-test@1.0.0 start
> node index.js

Successfully imported AttackDataModel in CommonJS mode
AttackDataModel instance created with UUID: test-uuid-cjs
Available methods: [
  'constructor',
  'getUuid',
  'getAttackObjects',
  'populateData',
  'initializeRelationships'
]
❯ npm run start

> attack_data_model@1.0.0 start
> node index.js

Successfully imported AttackDataModel in ESM mode
AttackDataModel instance created with UUID: test-uuid-esm
Available methods: [
  'constructor',
  'getUuid',
  'getAttackObjects',
  'populateData',
  'initializeRelationships'
]

@seansica seansica self-assigned this Apr 9, 2025
@seansica seansica merged commit 7df7187 into main Apr 9, 2025
4 checks passed
@seansica seansica deleted the cjs-esm-dual-support branch April 9, 2025 16:37
@github-actions
Copy link

github-actions bot commented Apr 9, 2025

🎉 This PR is included in version 1.1.0 🎉

The release is available on:

Your semantic-release bot 📦🚀

@github-actions
Copy link

github-actions bot commented Apr 9, 2025

🎉 This PR is included in version 2.1.0 🎉

The release is available on:

Your semantic-release bot 📦🚀

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants