Skip to content

Commit

Permalink
Add Elm 0.19.1 compatibility
Browse files Browse the repository at this point in the history
  • Loading branch information
sentience committed Apr 17, 2020
1 parent 7fb4a59 commit 8b87cd8
Show file tree
Hide file tree
Showing 6 changed files with 35 additions and 7 deletions.
8 changes: 4 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -144,18 +144,18 @@ image =
Normally when you compile this with Elm, the generated JS will look like:

```js
var cultureamp$babel_elm_assets_plugin$WebpackAsset$assetUrl = function (path) {
var $cultureamp$babel_elm_assets_plugin$WebpackAsset$assetUrl = function (path) {
return path;
};
var author$project$Main$imageUrl = cultureamp$babel_elm_assets_plugin$WebpackAsset$assetUrl(
var author$project$Main$imageUrl = $cultureamp$babel_elm_assets_plugin$WebpackAsset$assetUrl(
"./lost.png"
);
```

Now our Babel plugin can transform that JS to use a require call:

```js
var cultureamp$babel_elm_assets_plugin$WebpackAsset$assetUrl = function (path) {
var $cultureamp$babel_elm_assets_plugin$WebpackAsset$assetUrl = function (path) {
return path;
};
var author$project$Main$imageUrl = require("./lost.png");
Expand All @@ -164,7 +164,7 @@ var author$project$Main$imageUrl = require("./lost.png");
Which webpack will know how to handle, meaning your final JS will do something similar to:

```js
var cultureamp$babel_elm_assets_plugin$WebpackAsset$assetUrl = function (path) {
var $cultureamp$babel_elm_assets_plugin$WebpackAsset$assetUrl = function (path) {
return path;
};
var author$project$Main$myImageUrl = "/assets/lost-0fabe3.png";
Expand Down
12 changes: 11 additions & 1 deletion src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,17 @@ const isAssetExpression = (
options.module.replace(/\./g, "$"),
options.function
].join("$");
return isIdentifier(expression.callee) && (expression.callee.name == elm18TaggerName || expression.callee.name == elm19TaggerName)
const elm191TaggerName = [
'',
options.package.replace(/-/g, "_").replace(/\//g, "$"),
options.module.replace(/\./g, "$"),
options.function
].join("$");
return isIdentifier(expression.callee) && (
expression.callee.name == elm18TaggerName ||
expression.callee.name == elm19TaggerName ||
expression.callee.name == elm191TaggerName
)
};

export default plugin;
Expand Down
8 changes: 8 additions & 0 deletions test/__snapshots__/plugin.spec.ts.snap
Original file line number Diff line number Diff line change
Expand Up @@ -4498,3 +4498,11 @@ exports[`the plugin transforms a fully compiled optimized build 1`] = `
`;
exports[`the plugin works with Elm 0.18 generated code 1`] = `"require('ca-assets/images/illustrations/dashboard.svg').__esModule ? require('ca-assets/images/illustrations/dashboard.svg').default : require('ca-assets/images/illustrations/dashboard.svg');"`;
exports[`the plugin works with Elm 0.19.0 generated code 1`] = `
"var cultureamp$babel_elm_assets_plugin$WebpackAsset$assetUrl = function (path) {
return path;
};
var author$project$AssetLoaderExample$exampleSvgUrl = require('./ca-monogram.svg').__esModule ? require('./ca-monogram.svg').default : require('./ca-monogram.svg');"
`;
4 changes: 4 additions & 0 deletions test/fixtures/elm19.0_input.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
var cultureamp$babel_elm_assets_plugin$WebpackAsset$assetUrl = function (path) {
return path;
};
var author$project$AssetLoaderExample$exampleSvgUrl = cultureamp$babel_elm_assets_plugin$WebpackAsset$assetUrl('./ca-monogram.svg');
4 changes: 2 additions & 2 deletions test/fixtures/input.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
var cultureamp$babel_elm_assets_plugin$WebpackAsset$assetUrl = function (path) {
var $cultureamp$babel_elm_assets_plugin$WebpackAsset$assetUrl = function (path) {
return path;
};
var author$project$AssetLoaderExample$exampleSvgUrl = cultureamp$babel_elm_assets_plugin$WebpackAsset$assetUrl('./ca-monogram.svg');
var author$project$AssetLoaderExample$exampleSvgUrl = $cultureamp$babel_elm_assets_plugin$WebpackAsset$assetUrl('./ca-monogram.svg');
6 changes: 6 additions & 0 deletions test/plugin.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,12 @@ describe("the plugin", () => {
expect(transform(input)).toMatchSnapshot()
});

it("works with Elm 0.19.0 generated code", () => {
const transform = transformWith(plugin)
const input = fixture("elm19.0_input.js");
expect(transform(input)).toMatchSnapshot()
});

it("custom options work with Elm 0.18", () => {
const transform = transformWith(plugin, {
package: "user/project",
Expand Down

0 comments on commit 8b87cd8

Please sign in to comment.