Most of the Atlaskit editor is licensed with MIT or Apache 2.0 License. I'm trying to figure out how Atlaskit is supposed to be used without accepting non-free (as in freedom) Atlassian Design Guidelines License (ADG License) which is used for packages @atlaskit/icon, @atlaskit/icon-file-type and @atlaskit/icon-object which are part of deeply nested dependencies for the Atlaskit editor.
I'm fully aware that I need to re-create alternative icons and themes and I'm fine with that. However, when I create package.json and run npm install I get the above mentioned ADG licensed packages when I include following dependencies:
...
"dependencies": {
"@atlaskit/editor-core": "^120",
"@atlaskit/media-core": "^31",
"@atlaskit/smart-card": "^13",
...
How can I pass my own implementation to be used e.g. instead of ADG licensed default @atlaskit/icon from npmjs.com?
Forking the whole Atlaskit package tree just to modify dependencies to override these 3 packages is obviously possible but is there a better way? It seems that npm-force-resolutions can do something like this but as far as I know, it only allows replacing the dependency version number so I could simply select which official implementation of e.g. @atlaskit/icon I would like to use but that doesn't allow changing to totally different implementation. All versions of @atlaskit/icon have identical license and I'm trying to do this because I don't like ADG license and I'm willing to reimplement the required parts.
I would prefer something that I can save in main level package.json (or in a file next to it) where I require other atlaskit dependencies. I'm using node v12 in case it makes a difference. I don't need to support any lesser version but I'd like to be compatible with v14, too.
Update: given above dependencies, npm list "@atlaskit/icon" will emit
my-atlaskit-editor@0.0.1 /local/path/to/my/editor
├─┬ @atlaskit/editor-core@120.1.2
│ ├─┬ @atlaskit/calendar@9.2.10
│ │ └── @atlaskit/icon@20.1.2 deduped
│ ├─┬ @atlaskit/checkbox@10.1.14
│ │ └── @atlaskit/icon@20.1.2 deduped
│ ├─┬ @atlaskit/datetime-picker@9.4.7
│ │ ├─┬ @atlaskit/field-base@14.0.5
│ │ │ └── @atlaskit/icon@20.1.2 deduped
│ │ └── @atlaskit/icon@20.1.2 deduped
│ ├─┬ @atlaskit/droplist@10.0.8
│ │ └── @atlaskit/icon@20.1.2 deduped
│ ├─┬ @atlaskit/editor-common@44.1.0
│ │ ├── @atlaskit/icon@20.1.2 deduped
│ │ ├─┬ @atlaskit/media-picker@54.2.3
│ │ │ ├─┬ @atlaskit/flag@12.4.5
│ │ │ │ └── @atlaskit/icon@20.1.2 deduped
│ │ │ ├── @atlaskit/icon@20.1.2 deduped
│ │ │ └─┬ @atlaskit/media-card@68.0.2
│ │ │ └── @atlaskit/icon@20.1.2 deduped
│ │ └─┬ @atlaskit/profilecard@12.4.4
│ │ ├─┬ @atlaskit/avatar@18.0.2
│ │ │ └── @atlaskit/icon@20.1.2 deduped
│ │ └── @atlaskit/icon@20.1.2 deduped
│ ├─┬ @atlaskit/editor-markdown-transformer@3.1.25
│ │ └─┬ @atlaskit/editor-common@46.1.1
│ │ ├── @atlaskit/icon@20.1.2 deduped
│ │ ├─┬ @atlaskit/media-card@68.0.2
│ │ │ └── @atlaskit/icon@20.1.2 deduped
│ │ └─┬ @atlaskit/media-picker@54.2.3
│ │ ├─┬ @atlaskit/flag@12.4.5
│ │ │ └── @atlaskit/icon@20.1.2 deduped
│ │ └── @atlaskit/icon@20.1.2 deduped
│ ├─┬ @atlaskit/emoji@62.8.4
│ │ └── @atlaskit/icon@20.1.2 deduped
│ ├─┬ @atlaskit/form@7.4.1
│ │ └── @atlaskit/icon@20.1.2 deduped
│ ├── @atlaskit/icon@20.1.2
│ ├─┬ @atlaskit/media-card@67.2.3
│ │ ├── @atlaskit/icon@20.1.2 deduped
│ │ └─┬ @atlaskit/media-viewer@44.4.4
│ │ └── @atlaskit/icon@20.1.2 deduped
│ ├─┬ @atlaskit/media-editor@37.0.12
│ │ ├── @atlaskit/icon@20.1.2 deduped
│ │ └─┬ @atlaskit/media-card@68.0.2
│ │ └── @atlaskit/icon@20.1.2 deduped
│ ├─┬ @atlaskit/media-filmstrip@38.0.4
│ │ ├── @atlaskit/icon@20.1.2 deduped
│ │ └─┬ @atlaskit/media-card@68.0.2
│ │ └── @atlaskit/icon@20.1.2 deduped
│ ├─┬ @atlaskit/media-picker@54.2.3
│ │ ├─┬ @atlaskit/flag@12.4.5
│ │ │ └── @atlaskit/icon@20.1.2 deduped
│ │ ├── @atlaskit/icon@20.1.2 deduped
│ │ └─┬ @atlaskit/media-card@68.0.2
│ │ └── @atlaskit/icon@20.1.2 deduped
│ ├─┬ @atlaskit/mention@18.18.3
│ │ ├─┬ @atlaskit/avatar@18.0.2
│ │ │ └── @atlaskit/icon@20.1.2 deduped
│ │ └── @atlaskit/icon@20.1.2 deduped
│ ├─┬ @atlaskit/modal-dialog@10.6.4
│ │ └── @atlaskit/icon@20.1.2 deduped
│ ├─┬ @atlaskit/radio@3.2.3
│ │ └── @atlaskit/icon@20.1.2 deduped
│ ├─┬ @atlaskit/select@11.0.14
│ │ └── @atlaskit/icon@20.1.2 deduped
│ ├─┬ @atlaskit/status@0.9.25
│ │ └── @atlaskit/icon@20.1.2 deduped
│ └─┬ @atlaskit/task-decision@16.1.2
│ └── @atlaskit/icon@20.1.2 deduped
├─┬ @atlaskit/media-picker@54.2.3
│ ├─┬ @atlaskit/dropdown-menu@9.0.6
│ │ └── @atlaskit/icon@20.1.2 deduped
│ ├─┬ @atlaskit/flag@12.4.5
│ │ └── @atlaskit/icon@20.1.2 deduped
│ ├── @atlaskit/icon@20.1.2 deduped
│ ├─┬ @atlaskit/media-card@68.0.2
│ │ └── @atlaskit/icon@20.1.2 deduped
│ └─┬ @atlaskit/media-ui@12.5.1
│ ├─┬ @atlaskit/avatar@18.0.2
│ │ └── @atlaskit/icon@20.1.2 deduped
│ └── @atlaskit/icon@20.1.2 deduped
└─┬ @atlaskit/smart-card@13.5.1
└── @atlaskit/icon@20.1.2 deduped
Is it possible to replace just package @atlaskit/icon without replacing all the packages in the tree between my-atlaskit-editor and @atlaskit/icon. In this example it would be following list:
@atlaskit/avatar
@atlaskit/calendar
@atlaskit/checkbox
@atlaskit/datetime-picker
@atlaskit/dropdown-menu
@atlaskit/droplist
@atlaskit/editor-common
@atlaskit/editor-core
@atlaskit/editor-markdown-transformer
@atlaskit/emoji
@atlaskit/field-base
@atlaskit/flag
@atlaskit/form
@atlaskit/media-card
@atlaskit/media-editor
@atlaskit/media-filmstrip
@atlaskit/media-picker
@atlaskit/media-ui
@atlaskit/media-viewer
@atlaskit/mention
@atlaskit/modal-dialog
@atlaskit/profilecard
@atlaskit/radio
@atlaskit/select
@atlaskit/smart-card
@atlaskit/status
@atlaskit/task-decision
That's lots of packages to override just to change the dependencies in nested packages. In practice, I would need to fork all those packages and change dependencies of each nested package to refer to my forked version which again has only modified dependencies pointing to yet another package forked by me. At the leaf of this whole replaced tree would be a package.json that points to free variants of @atlaskit/icon, @atlaskit/icon-file-type and @atlaskit/icon-object.
Is there really no way to fix this mess without forking and modifying dependencies in the whole tree?