-
Notifications
You must be signed in to change notification settings - Fork 168
SWC Macro #78
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Comments
@ije Thoughts? @alfredosalzillo Are you still interested in creating such an env plugin? |
maybe too much to import the |
@ije Makes sense! |
i perfer a new concept swc-marco can be a solution: import env from 'https://deno.land/x/aleph/swc-macros/env.macro.ts'
const value = env('KEY') it will be transpiled to below code: const value = __ALEPH_ENV.get('KEY') and the macro will export the what do you think? @shadowtime2000 @alfredosalzillo |
with that, people can write their own macro that gives more power to define your code syntax. |
I agree. I prefer this solution too. |
for example, we can transform graphql string to AST at build time with macro: import gql from 'https://deno.land/x/aleph/macros/graphql.macro.ts'
const query = gql`
{
user(id: 123) {
firstName
lastName
}
}
` output code: const query = {
"kind": "Document",
"definitions": [ ... ]
} |
I like the idea of an SWC macro, it could possibly then help us with #60. |
@ije How exactly would this be written? Will we write it within the new compiler after it is merged or will we another repo for this project or something? I think SWC macros could be useful just all around in a ton of places. |
it seems like: // https://deno.land/x/aleph/swc-macros/env.macro.ts
export default function EnvMacro(key: string): string {
return ''
}
EnvMacro.macro = {
// inject code to `main.js` at ssr/ssg
inject(): string {
return `window.__ALEPH_ENV=${JSON.stringify(Deno.env)}`
},
// transform macro call expression
transform(arg0): string {
return `__ALEPH_ENV.get(${arg0})`
}
} |
@ije Thx, but I was actually asking about how the compiler which expands the macros will be organized. I don't think we should have an export default function EnvMacro(key: string): string {
return ''
}
EnvMacro.macro = {
transform(arg0): string {
return Deno.env.get(arg0);
}
} |
@shadowtime2000 the |
Tbh, I feel like macros purely for a framework like this is a little overkill and we could look into creating a library for these macros that doesn't require Aleph to be used. |
@ije I don't think it is a good idea to dump everything in export default function EnvMacro(key: string): string {
return ''
}
EnvMacro.macro = {
transform(arg0): string {
return `"${Deno.env.get(arg0)}"`;
}
} So |
@shadowtime2000 you are right it's a bad idea to inject |
i feel that the maco function is very easy to implement in the new compile with swc, if there is a statement like |
@ije Good point, it would be easier to make it a library once there is a more standard form for ast modification and compilation and stuff. |
@shadowtime2000 for sure |
We should probably allow returning an AST or something for more organized complex macros. |
I think we should maybe instead just invoke a macro if macro data is present on the function. |
A plugin to replace
.env
variables in a certain manner. Initially proposed in #77. Initial design used regex to replace anything surrounded by handlebars. I think we should usedeno_swc
which will allow us to instead replaceDeno.env.
anything. We could possibly look into requiringALEPH_PUBLIC_
prefix to.env
variables unless it is accessed inside auseDeno
hook.The text was updated successfully, but these errors were encountered: