proscenium 0.1.0.alpha2-x86_64-linux → 0.1.0.alpha3-x86_64-linux
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +158 -29
- data/bin/esbuild +0 -0
- data/bin/parcel_css +0 -0
- data/config/routes.rb +1 -1
- data/lib/proscenium/compilers/esbuild/compile_error.js +145 -0
- data/lib/proscenium/compilers/esbuild/css_plugin.js +76 -0
- data/lib/proscenium/compilers/esbuild/env_plugin.js +6 -4
- data/lib/proscenium/compilers/esbuild/http_bundle_plugin.js +53 -0
- data/lib/proscenium/compilers/esbuild/import_map.js +59 -0
- data/lib/proscenium/compilers/esbuild/resolve_plugin.js +38 -35
- data/lib/proscenium/compilers/esbuild/setup_plugin.js +23 -22
- data/lib/proscenium/{cli → compilers}/esbuild/solidjs_plugin.js +5 -4
- data/lib/proscenium/compilers/esbuild.bench.js +7 -3
- data/lib/proscenium/compilers/esbuild.js +60 -19
- data/lib/proscenium/helper.rb +2 -2
- data/lib/proscenium/middleware/base.rb +13 -3
- data/lib/proscenium/middleware/esbuild.rb +14 -0
- data/lib/proscenium/middleware/parcel_css.rb +30 -3
- data/lib/proscenium/middleware.rb +3 -0
- data/lib/proscenium/railtie.rb +16 -18
- data/lib/proscenium/runtime/component_manager/index.js +7 -7
- data/lib/proscenium/runtime/component_manager/{render_component.js → render_component.jsx} +9 -13
- data/lib/proscenium/version.rb +1 -1
- metadata +8 -14
- data/lib/proscenium/cli/argument_error.js +0 -24
- data/lib/proscenium/cli/builders/index.js +0 -1
- data/lib/proscenium/cli/builders/javascript.js +0 -45
- data/lib/proscenium/cli/builders/react.js +0 -60
- data/lib/proscenium/cli/builders/solid.js +0 -46
- data/lib/proscenium/cli/esbuild/env_plugin.js +0 -21
- data/lib/proscenium/cli/esbuild/resolve_plugin.js +0 -136
- data/lib/proscenium/cli/js_builder.js +0 -194
- data/lib/proscenium/cli/solid.js +0 -15
- data/lib/proscenium/cli/utils.js +0 -93
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: proscenium
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.0.
|
4
|
+
version: 0.1.0.alpha3
|
5
5
|
platform: x86_64-linux
|
6
6
|
authors:
|
7
7
|
- Joel Moss
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-08-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: actioncable
|
@@ -132,24 +132,18 @@ files:
|
|
132
132
|
- bin/parcel_css
|
133
133
|
- config/routes.rb
|
134
134
|
- lib/proscenium.rb
|
135
|
-
- lib/proscenium/cli/argument_error.js
|
136
|
-
- lib/proscenium/cli/builders/index.js
|
137
|
-
- lib/proscenium/cli/builders/javascript.js
|
138
|
-
- lib/proscenium/cli/builders/react.js
|
139
|
-
- lib/proscenium/cli/builders/solid.js
|
140
|
-
- lib/proscenium/cli/esbuild/env_plugin.js
|
141
|
-
- lib/proscenium/cli/esbuild/resolve_plugin.js
|
142
|
-
- lib/proscenium/cli/esbuild/solidjs_plugin.js
|
143
|
-
- lib/proscenium/cli/js_builder.js
|
144
|
-
- lib/proscenium/cli/solid.js
|
145
|
-
- lib/proscenium/cli/utils.js
|
146
135
|
- lib/proscenium/compiler.js
|
147
136
|
- lib/proscenium/compilers/esbuild.bench.js
|
148
137
|
- lib/proscenium/compilers/esbuild.js
|
149
138
|
- lib/proscenium/compilers/esbuild/argument_error.js
|
139
|
+
- lib/proscenium/compilers/esbuild/compile_error.js
|
140
|
+
- lib/proscenium/compilers/esbuild/css_plugin.js
|
150
141
|
- lib/proscenium/compilers/esbuild/env_plugin.js
|
142
|
+
- lib/proscenium/compilers/esbuild/http_bundle_plugin.js
|
143
|
+
- lib/proscenium/compilers/esbuild/import_map.js
|
151
144
|
- lib/proscenium/compilers/esbuild/resolve_plugin.js
|
152
145
|
- lib/proscenium/compilers/esbuild/setup_plugin.js
|
146
|
+
- lib/proscenium/compilers/esbuild/solidjs_plugin.js
|
153
147
|
- lib/proscenium/css_module.rb
|
154
148
|
- lib/proscenium/current.rb
|
155
149
|
- lib/proscenium/helper.rb
|
@@ -164,7 +158,7 @@ files:
|
|
164
158
|
- lib/proscenium/railtie.rb
|
165
159
|
- lib/proscenium/runtime/auto_reload.js
|
166
160
|
- lib/proscenium/runtime/component_manager/index.js
|
167
|
-
- lib/proscenium/runtime/component_manager/render_component.
|
161
|
+
- lib/proscenium/runtime/component_manager/render_component.jsx
|
168
162
|
- lib/proscenium/runtime/import_css.js
|
169
163
|
- lib/proscenium/runtime/react_shim/index.js
|
170
164
|
- lib/proscenium/runtime/react_shim/package.json
|
@@ -1,24 +0,0 @@
|
|
1
|
-
export default class CliArgumentError extends Error {
|
2
|
-
static MESSAGES = {
|
3
|
-
cwdRequired: 'Current working directory is required as first argument.',
|
4
|
-
entrypointRequired: 'An entry point is required as second argument.',
|
5
|
-
builderRequired: 'The builder is required as third and final argument.',
|
6
|
-
|
7
|
-
cwdUnknown: ({ cwd }) => `A valid working directory is required - received ${cwd}`,
|
8
|
-
entrypointUnknown: ({ entrypoint }) =>
|
9
|
-
`A valid entrypoint is required - received ${entrypoint}`,
|
10
|
-
builderUnknown: ({ builder }) => `Unknown builder '${builder}'`
|
11
|
-
}
|
12
|
-
|
13
|
-
constructor(reason, options) {
|
14
|
-
let message = CliArgumentError.MESSAGES[reason]
|
15
|
-
if (typeof message === 'function') {
|
16
|
-
message = message(options)
|
17
|
-
}
|
18
|
-
|
19
|
-
super(message, options)
|
20
|
-
|
21
|
-
this.reason = reason
|
22
|
-
this.message = message
|
23
|
-
}
|
24
|
-
}
|
@@ -1 +0,0 @@
|
|
1
|
-
export const builderNames = ['javascript', 'react', 'solid']
|
@@ -1,45 +0,0 @@
|
|
1
|
-
import { build, stop } from 'esbuild'
|
2
|
-
|
3
|
-
import envPlugin from '../esbuild/env_plugin.js'
|
4
|
-
import resolvePlugin from '../esbuild/resolve_plugin.js'
|
5
|
-
|
6
|
-
export default async (cwd, entrypoint) => {
|
7
|
-
const railsEnv = Deno.env.get('RAILS_ENV')
|
8
|
-
const isProd = railsEnv === 'production'
|
9
|
-
|
10
|
-
let entrypointIsSourcemap = false
|
11
|
-
if (/\.js\.map$/.test(entrypoint)) {
|
12
|
-
entrypoint = entrypoint.replace(/\.map$/, '')
|
13
|
-
entrypointIsSourcemap = true
|
14
|
-
}
|
15
|
-
|
16
|
-
const params = {
|
17
|
-
entryPoints: [entrypoint],
|
18
|
-
absWorkingDir: cwd,
|
19
|
-
logLevel: 'error',
|
20
|
-
sourcemap: !entrypointIsSourcemap ? false : 'linked',
|
21
|
-
outdir: 'public',
|
22
|
-
outbase: './',
|
23
|
-
write: false,
|
24
|
-
format: 'esm',
|
25
|
-
minify: isProd,
|
26
|
-
bundle: true,
|
27
|
-
plugins: [envPlugin(), resolvePlugin({ debug: false })]
|
28
|
-
}
|
29
|
-
|
30
|
-
try {
|
31
|
-
const result = await build(params)
|
32
|
-
|
33
|
-
if (params.sourcemap === 'linked') {
|
34
|
-
if (entrypointIsSourcemap) {
|
35
|
-
return result.outputFiles[0].contents
|
36
|
-
} else {
|
37
|
-
return result.outputFiles[1].contents
|
38
|
-
}
|
39
|
-
} else {
|
40
|
-
return result.outputFiles[0].contents
|
41
|
-
}
|
42
|
-
} finally {
|
43
|
-
stop()
|
44
|
-
}
|
45
|
-
}
|
@@ -1,60 +0,0 @@
|
|
1
|
-
import { build, stop } from 'esbuild'
|
2
|
-
import { join } from 'std/path/mod.ts'
|
3
|
-
|
4
|
-
import envPlugin from '../esbuild/env_plugin.js'
|
5
|
-
import resolvePlugin from '../esbuild/resolve_plugin.js'
|
6
|
-
|
7
|
-
export default async (cwd, entrypoint) => {
|
8
|
-
const railsEnv = Deno.env.get('RAILS_ENV')
|
9
|
-
const isProd = railsEnv === 'production'
|
10
|
-
|
11
|
-
let entrypointIsSourcemap = false
|
12
|
-
if (/\.jsx\.map$/.test(entrypoint)) {
|
13
|
-
entrypoint = entrypoint.replace(/\.map$/, '')
|
14
|
-
entrypointIsSourcemap = true
|
15
|
-
}
|
16
|
-
|
17
|
-
const params = {
|
18
|
-
entryPoints: [entrypoint],
|
19
|
-
absWorkingDir: cwd,
|
20
|
-
logLevel: 'error',
|
21
|
-
sourcemap: !entrypointIsSourcemap ? false : 'linked',
|
22
|
-
outdir: 'public',
|
23
|
-
outbase: './',
|
24
|
-
write: false,
|
25
|
-
format: 'esm',
|
26
|
-
minify: isProd,
|
27
|
-
bundle: true,
|
28
|
-
// jsxFactory: 'createElement',
|
29
|
-
// jsxFragment: 'Fragment',
|
30
|
-
plugins: [envPlugin(), resolvePlugin({ debug: false })]
|
31
|
-
}
|
32
|
-
|
33
|
-
if (entrypoint.endsWith('.jsx')) {
|
34
|
-
try {
|
35
|
-
const stat = Deno.lstatSync(join(cwd, 'lib/react_shim.js'))
|
36
|
-
if (stat.isFile) {
|
37
|
-
params.inject = ['./lib/react_shim.js']
|
38
|
-
}
|
39
|
-
} catch {
|
40
|
-
// Safe to swallow as this should only throw if file does not exist.
|
41
|
-
// TODO: print warning to user
|
42
|
-
}
|
43
|
-
}
|
44
|
-
|
45
|
-
try {
|
46
|
-
const result = await build(params)
|
47
|
-
|
48
|
-
if (params.sourcemap === 'linked') {
|
49
|
-
if (entrypointIsSourcemap) {
|
50
|
-
return result.outputFiles[0].contents
|
51
|
-
} else {
|
52
|
-
return result.outputFiles[1].contents
|
53
|
-
}
|
54
|
-
} else {
|
55
|
-
return result.outputFiles[0].contents
|
56
|
-
}
|
57
|
-
} finally {
|
58
|
-
stop()
|
59
|
-
}
|
60
|
-
}
|
@@ -1,46 +0,0 @@
|
|
1
|
-
import { build, stop } from 'esbuild'
|
2
|
-
|
3
|
-
import envPlugin from '../esbuild/env_plugin.js'
|
4
|
-
import resolvePlugin from '../esbuild/resolve_plugin.js'
|
5
|
-
import solidjsPlugin from '../esbuild/solidjs_plugin.js'
|
6
|
-
|
7
|
-
export default async (cwd, entrypoint) => {
|
8
|
-
const railsEnv = Deno.env.get('RAILS_ENV')
|
9
|
-
const isProd = railsEnv === 'production'
|
10
|
-
|
11
|
-
let entrypointIsSourcemap = false
|
12
|
-
if (/\.jsx\.map$/.test(entrypoint)) {
|
13
|
-
entrypoint = entrypoint.replace(/\.map$/, '')
|
14
|
-
entrypointIsSourcemap = true
|
15
|
-
}
|
16
|
-
|
17
|
-
const params = {
|
18
|
-
entryPoints: [entrypoint],
|
19
|
-
absWorkingDir: cwd,
|
20
|
-
logLevel: 'error',
|
21
|
-
sourcemap: !entrypointIsSourcemap ? false : 'linked',
|
22
|
-
outdir: 'public',
|
23
|
-
outbase: './',
|
24
|
-
write: false,
|
25
|
-
format: 'esm',
|
26
|
-
minify: isProd,
|
27
|
-
bundle: true,
|
28
|
-
plugins: [envPlugin(), resolvePlugin({ debug: false }), solidjsPlugin({ debug: false })]
|
29
|
-
}
|
30
|
-
|
31
|
-
try {
|
32
|
-
const result = await build(params)
|
33
|
-
|
34
|
-
if (params.sourcemap === 'linked') {
|
35
|
-
if (entrypointIsSourcemap) {
|
36
|
-
return result.outputFiles[0].contents
|
37
|
-
} else {
|
38
|
-
return result.outputFiles[1].contents
|
39
|
-
}
|
40
|
-
} else {
|
41
|
-
return result.outputFiles[0].contents
|
42
|
-
}
|
43
|
-
} finally {
|
44
|
-
stop()
|
45
|
-
}
|
46
|
-
}
|
@@ -1,21 +0,0 @@
|
|
1
|
-
import { setup } from '../utils.js'
|
2
|
-
|
3
|
-
export default setup('env', () => {
|
4
|
-
return {
|
5
|
-
onResolve: {
|
6
|
-
filter: /^env$/,
|
7
|
-
callback({ path }) {
|
8
|
-
return { path, namespace: 'env' }
|
9
|
-
}
|
10
|
-
},
|
11
|
-
|
12
|
-
onLoad: {
|
13
|
-
filter: /.*/,
|
14
|
-
namespace: 'env',
|
15
|
-
callback() {
|
16
|
-
const env = Deno.env.toObject()
|
17
|
-
return { loader: 'json', contents: JSON.stringify(env) }
|
18
|
-
}
|
19
|
-
}
|
20
|
-
}
|
21
|
-
})
|
@@ -1,136 +0,0 @@
|
|
1
|
-
import { join, resolve } from 'std/path/mod.ts'
|
2
|
-
import {
|
3
|
-
parseFromString as parseImportMap,
|
4
|
-
resolve as resolveFromImportMap
|
5
|
-
} from 'import-maps/resolve'
|
6
|
-
|
7
|
-
import { setup } from '../utils.js'
|
8
|
-
|
9
|
-
const baseURL = new URL('file://')
|
10
|
-
const importKinds = ['import-statement', 'dynamic-import', 'require-call']
|
11
|
-
|
12
|
-
export default setup('resolve', build => {
|
13
|
-
const cwd = build.initialOptions.absWorkingDir
|
14
|
-
const importMap = readImportMap()
|
15
|
-
|
16
|
-
return {
|
17
|
-
onResolve: {
|
18
|
-
filter: /.*/,
|
19
|
-
async callback(args) {
|
20
|
-
// Remote modules
|
21
|
-
if (args.path.startsWith('http://') || args.path.startsWith('https://')) {
|
22
|
-
return { external: true }
|
23
|
-
}
|
24
|
-
|
25
|
-
// Proscenium runtime
|
26
|
-
if (args.path.startsWith('/proscenium-runtime')) {
|
27
|
-
return { external: true }
|
28
|
-
}
|
29
|
-
|
30
|
-
// Everything else is unbundled.
|
31
|
-
if (importKinds.includes(args.kind)) {
|
32
|
-
return await unbundleImport(args)
|
33
|
-
}
|
34
|
-
}
|
35
|
-
},
|
36
|
-
|
37
|
-
onLoad: {
|
38
|
-
filter: /.*/,
|
39
|
-
namespace: 'importStylesheet',
|
40
|
-
callback(args) {
|
41
|
-
const result = {
|
42
|
-
resolveDir: cwd,
|
43
|
-
loader: 'js'
|
44
|
-
}
|
45
|
-
|
46
|
-
if (args.path.endsWith('.module.css')) {
|
47
|
-
result.contents = `
|
48
|
-
import { importCssModule } from '/proscenium-runtime/import_css.js'
|
49
|
-
export default await importCssModule('${args.path}')
|
50
|
-
`
|
51
|
-
} else {
|
52
|
-
result.contents = `
|
53
|
-
import { appendStylesheet } from '/proscenium-runtime/import_css.js'
|
54
|
-
appendStylesheet('${args.path}')
|
55
|
-
`
|
56
|
-
}
|
57
|
-
|
58
|
-
return result
|
59
|
-
}
|
60
|
-
}
|
61
|
-
}
|
62
|
-
|
63
|
-
// Resolve the given `params.path` to a path relative to the Rails root.
|
64
|
-
//
|
65
|
-
// Examples:
|
66
|
-
// 'react' -> '/.../node_modules/react/index.js'
|
67
|
-
// './my_module' -> '/.../app/my_module.js'
|
68
|
-
// '/app/my_module' -> '/.../app/my_module.js'
|
69
|
-
async function unbundleImport(params) {
|
70
|
-
const result = { path: params.path }
|
71
|
-
|
72
|
-
if (importMap) {
|
73
|
-
const { matched, resolvedImport } = resolveFromImportMap(params.path, importMap, baseURL)
|
74
|
-
if (matched) {
|
75
|
-
if (resolvedImport.protocol === 'file:') {
|
76
|
-
params.path = resolvedImport.pathname
|
77
|
-
} else {
|
78
|
-
return { path: resolvedImport.href, external: true }
|
79
|
-
}
|
80
|
-
}
|
81
|
-
}
|
82
|
-
|
83
|
-
// Absolute path - append to current working dir.
|
84
|
-
if (params.path.startsWith('/')) {
|
85
|
-
result.path = resolve(cwd, params.path.slice(1))
|
86
|
-
}
|
87
|
-
|
88
|
-
// Resolve the path using esbuild's internal resolution. This allows us to import node packages
|
89
|
-
// and extension-less paths without custom code, as esbuild with resolve them for us.
|
90
|
-
const resolveResult = await build.resolve(result.path, {
|
91
|
-
resolveDir: params.resolveDir,
|
92
|
-
pluginData: {
|
93
|
-
// We use this property later on, as we should ignore this resolution call.
|
94
|
-
isResolvingPath: true
|
95
|
-
}
|
96
|
-
})
|
97
|
-
|
98
|
-
if (resolveResult.errors.length > 0) {
|
99
|
-
// throw `${resolveResult.errors[0].text} (resolveDir: ${cwd})`
|
100
|
-
}
|
101
|
-
|
102
|
-
result.path = resolveResult.path.slice(cwd.length)
|
103
|
-
result.sideEffects = resolveResult.sideEffects
|
104
|
-
|
105
|
-
if (
|
106
|
-
params.path.endsWith('.css') &&
|
107
|
-
params.kind === 'import-statement' &&
|
108
|
-
/\.jsx?$/.test(params.importer)
|
109
|
-
) {
|
110
|
-
// We're importing a CSS file from JS(X).
|
111
|
-
result.namespace = 'importStylesheet'
|
112
|
-
} else {
|
113
|
-
// Requested path is a bare module.
|
114
|
-
result.external = true
|
115
|
-
}
|
116
|
-
|
117
|
-
return result
|
118
|
-
}
|
119
|
-
|
120
|
-
function readImportMap() {
|
121
|
-
const file = join(cwd, 'config', 'import_map.json')
|
122
|
-
let source
|
123
|
-
|
124
|
-
try {
|
125
|
-
source = Deno.readTextFileSync(file)
|
126
|
-
} catch {
|
127
|
-
return null
|
128
|
-
}
|
129
|
-
|
130
|
-
return parseImportMap(source, baseURL)
|
131
|
-
}
|
132
|
-
})
|
133
|
-
|
134
|
-
function isBareModule(path) {
|
135
|
-
return !path.startsWith('.') && !path.startsWith('/')
|
136
|
-
}
|
@@ -1,194 +0,0 @@
|
|
1
|
-
import * as esbuild from 'https://deno.land/x/esbuild@v0.14.27/mod.js'
|
2
|
-
import { parse } from 'flags/mod.ts'
|
3
|
-
import { join } from 'path/mod.ts'
|
4
|
-
|
5
|
-
import resolvePlugin from './esbuild/resolve_plugin.js'
|
6
|
-
|
7
|
-
const isProd = Deno.env.get('RAILS_ENV') === 'production'
|
8
|
-
const isTest = Deno.env.get('RAILS_ENV') === 'test'
|
9
|
-
const template = `
|
10
|
-
<style>
|
11
|
-
:host {
|
12
|
-
position: fixed;
|
13
|
-
z-index: 99999;
|
14
|
-
top: 0;
|
15
|
-
left: 0;
|
16
|
-
width: 100%;
|
17
|
-
height: 100%;
|
18
|
-
overflow-y: scroll;
|
19
|
-
margin: 0;
|
20
|
-
background: rgba(0, 0, 0, 0.66);
|
21
|
-
display: flex;
|
22
|
-
align-items: center;
|
23
|
-
--monospace: 'SFMono-Regular', Consolas,
|
24
|
-
'Liberation Mono', Menlo, Courier, monospace;
|
25
|
-
--red: #ff5555;
|
26
|
-
--yellow: #e2aa53;
|
27
|
-
--purple: #cfa4ff;
|
28
|
-
--cyan: #2dd9da;
|
29
|
-
--dim: #c9c9c9;
|
30
|
-
}
|
31
|
-
|
32
|
-
.window {
|
33
|
-
font-family: var(--monospace);
|
34
|
-
line-height: 1.5;
|
35
|
-
width: 800px;
|
36
|
-
color: #d8d8d8;
|
37
|
-
margin: 30px auto;
|
38
|
-
padding: 25px 40px;
|
39
|
-
position: relative;
|
40
|
-
background: #181818;
|
41
|
-
border-radius: 6px 6px 8px 8px;
|
42
|
-
box-shadow: 0 19px 38px rgba(0,0,0,0.30), 0 15px 12px rgba(0,0,0,0.22);
|
43
|
-
overflow: hidden;
|
44
|
-
border-top: 8px solid var(--red);
|
45
|
-
}
|
46
|
-
|
47
|
-
pre {
|
48
|
-
font-family: var(--monospace);
|
49
|
-
font-size: 16px;
|
50
|
-
margin-top: 0;
|
51
|
-
margin-bottom: 1em;
|
52
|
-
overflow-x: scroll;
|
53
|
-
scrollbar-width: none;
|
54
|
-
}
|
55
|
-
|
56
|
-
pre::-webkit-scrollbar {
|
57
|
-
display: none;
|
58
|
-
}
|
59
|
-
|
60
|
-
.message {
|
61
|
-
line-height: 1.3;
|
62
|
-
font-weight: 600;
|
63
|
-
white-space: pre-wrap;
|
64
|
-
}
|
65
|
-
|
66
|
-
.message-body {
|
67
|
-
color: var(--red);
|
68
|
-
}
|
69
|
-
|
70
|
-
.file {
|
71
|
-
color: var(--cyan);
|
72
|
-
margin-bottom: 0;
|
73
|
-
white-space: pre-wrap;
|
74
|
-
word-break: break-all;
|
75
|
-
}
|
76
|
-
|
77
|
-
</style>
|
78
|
-
<div class="window">
|
79
|
-
<pre class="message"><span class="message-body"></span></pre>
|
80
|
-
<pre class="file"></pre>
|
81
|
-
</div>
|
82
|
-
`
|
83
|
-
|
84
|
-
export default async (args, { debug }) => {
|
85
|
-
const { _: entrypoints, ...flags } = parse(args)
|
86
|
-
const [cwd, entrypoint] = validatePaths(entrypoints)
|
87
|
-
|
88
|
-
const params = {
|
89
|
-
entryPoints: [entrypoint],
|
90
|
-
absWorkingDir: cwd,
|
91
|
-
logLevel: 'error',
|
92
|
-
sourcemap: isTest ? false : 'inline',
|
93
|
-
write: false,
|
94
|
-
format: 'esm',
|
95
|
-
// minify: true,
|
96
|
-
bundle: true,
|
97
|
-
plugins: [resolvePlugin({ debug })]
|
98
|
-
}
|
99
|
-
|
100
|
-
if (entrypoint.endsWith('.jsx')) {
|
101
|
-
try {
|
102
|
-
const stat = Deno.lstatSync(join(cwd, 'lib/react_shim.js'))
|
103
|
-
if (stat.isFile) {
|
104
|
-
params.inject = ['./lib/react_shim.js']
|
105
|
-
}
|
106
|
-
} catch {
|
107
|
-
// Safe to swallow as this should only throw if file does not exist.
|
108
|
-
}
|
109
|
-
}
|
110
|
-
|
111
|
-
try {
|
112
|
-
const result = await esbuild.build(params)
|
113
|
-
return result.outputFiles[0].contents
|
114
|
-
|
115
|
-
// } catch (e) {
|
116
|
-
// if (isProd) {
|
117
|
-
// return new TextEncoder().encode(`
|
118
|
-
// const err = ${JSON.stringify(e.errors[0])}
|
119
|
-
// const location = \`\${err.location.file}:\${err.location.line}:\${err.location.column}\`
|
120
|
-
// console.error('%s at %O', err.text, location);
|
121
|
-
// `)
|
122
|
-
// } else {
|
123
|
-
// return new TextEncoder().encode(`
|
124
|
-
// class ErrorOverlay extends HTMLElement {
|
125
|
-
// constructor(err) {
|
126
|
-
// super()
|
127
|
-
|
128
|
-
// this.root = this.attachShadow({ mode: 'open' })
|
129
|
-
// this.root.innerHTML = \`${template}\`
|
130
|
-
// this.root.querySelector('.message-body').textContent = err.text.trim()
|
131
|
-
|
132
|
-
// if (err.location) {
|
133
|
-
// const location = \`\${err.location.file}:\${err.location.line}:\${err.location.column}\`
|
134
|
-
// this.root.querySelector('.file').textContent = location
|
135
|
-
// console.error('%s at %O', err.text, location)
|
136
|
-
// } else {
|
137
|
-
// console.error(err.text)
|
138
|
-
// }
|
139
|
-
|
140
|
-
// throw err
|
141
|
-
// }
|
142
|
-
// }
|
143
|
-
|
144
|
-
// customElements.define('error-overlay', ErrorOverlay)
|
145
|
-
// document.body.appendChild(new ErrorOverlay(${JSON.stringify(e.errors[0])}))
|
146
|
-
// `)
|
147
|
-
// }
|
148
|
-
} finally {
|
149
|
-
esbuild.stop()
|
150
|
-
}
|
151
|
-
}
|
152
|
-
|
153
|
-
function validatePaths(paths) {
|
154
|
-
const cwd = paths[0]
|
155
|
-
const entrypoint = paths[1]
|
156
|
-
|
157
|
-
if (!cwd || !entrypoint) {
|
158
|
-
throw new TypeError(
|
159
|
-
'Current working directory and entrypoint are required as first and second arguments.'
|
160
|
-
)
|
161
|
-
}
|
162
|
-
|
163
|
-
try {
|
164
|
-
const stat = Deno.lstatSync(cwd)
|
165
|
-
if (!stat.isDirectory) {
|
166
|
-
throw new TypeError(
|
167
|
-
`Current working directory is required as the first argument - received ${cwd}`
|
168
|
-
)
|
169
|
-
}
|
170
|
-
} catch {
|
171
|
-
throw new TypeError(
|
172
|
-
`A valid working directory is required as the first argument - received ${cwd}`
|
173
|
-
)
|
174
|
-
}
|
175
|
-
|
176
|
-
try {
|
177
|
-
const stat = Deno.lstatSync(join(cwd, entrypoint))
|
178
|
-
if (!stat.isFile) {
|
179
|
-
throw new TypeError(`Entrypoint is required as the second argument - received ${entrypoint}`)
|
180
|
-
}
|
181
|
-
} catch {
|
182
|
-
throw new TypeError(
|
183
|
-
`A valid entrypoint is required as the second argument - received ${entrypoint}`
|
184
|
-
)
|
185
|
-
}
|
186
|
-
|
187
|
-
if (/\.(js|jsx)$/.test(entrypoint) === false) {
|
188
|
-
throw new TypeError(
|
189
|
-
`Only a JS/JSX entrypoint is supported with this CLI - received ${entrypoint}`
|
190
|
-
)
|
191
|
-
}
|
192
|
-
|
193
|
-
return [cwd, entrypoint]
|
194
|
-
}
|
data/lib/proscenium/cli/solid.js
DELETED
@@ -1,15 +0,0 @@
|
|
1
|
-
import { writeAll } from 'std/streams/mod.ts'
|
2
|
-
import { parseArgs } from './utils.js'
|
3
|
-
|
4
|
-
import builder from './builders/solid.js'
|
5
|
-
|
6
|
-
if (import.meta.main) {
|
7
|
-
await writeAll(Deno.stdout, await main(Deno.args))
|
8
|
-
}
|
9
|
-
|
10
|
-
async function main(args = []) {
|
11
|
-
const [cwd, entrypoint, _] = parseArgs(args)
|
12
|
-
return await builder(cwd, entrypoint)
|
13
|
-
}
|
14
|
-
|
15
|
-
export default main
|
data/lib/proscenium/cli/utils.js
DELETED
@@ -1,93 +0,0 @@
|
|
1
|
-
import { join } from 'std/path/mod.ts'
|
2
|
-
|
3
|
-
import CliArgumentError from './argument_error.js'
|
4
|
-
import { builderNames } from './builders/index.js'
|
5
|
-
|
6
|
-
export const isTest = () => Deno.env.get('ENVIRONMENT') === 'test'
|
7
|
-
|
8
|
-
export const debug = (...args) => {
|
9
|
-
isTest() && console.log(...args)
|
10
|
-
}
|
11
|
-
|
12
|
-
export const setup = (pluginName, pluginFn) => {
|
13
|
-
return (options = {}) => ({
|
14
|
-
name: pluginName,
|
15
|
-
setup(build) {
|
16
|
-
const plugin = pluginFn(build)
|
17
|
-
|
18
|
-
if (plugin.onResolve) {
|
19
|
-
const { callback, ...onResolve } = plugin.onResolve
|
20
|
-
|
21
|
-
build.onResolve(onResolve, async params => {
|
22
|
-
if (params.pluginData?.isResolvingPath) return
|
23
|
-
|
24
|
-
const results = await callback(params)
|
25
|
-
|
26
|
-
options.debug && console.debug(`plugin(${pluginName}:onResolve)`, { params, results })
|
27
|
-
|
28
|
-
return results
|
29
|
-
})
|
30
|
-
}
|
31
|
-
|
32
|
-
if (plugin.onLoad) {
|
33
|
-
const { callback, ...onLoad } = plugin.onLoad
|
34
|
-
|
35
|
-
build.onLoad(onLoad, params => {
|
36
|
-
const results = callback(params)
|
37
|
-
|
38
|
-
options.debug && console.debug(`plugin(${pluginName}:onLoad)`, { params, results })
|
39
|
-
|
40
|
-
return results
|
41
|
-
})
|
42
|
-
}
|
43
|
-
}
|
44
|
-
})
|
45
|
-
}
|
46
|
-
|
47
|
-
export const parseArgs = args => {
|
48
|
-
let [cwd, entrypoint, builder] = args
|
49
|
-
|
50
|
-
if (!cwd) {
|
51
|
-
throw new CliArgumentError('cwdRequired')
|
52
|
-
}
|
53
|
-
|
54
|
-
if (!entrypoint) {
|
55
|
-
throw new CliArgumentError('entrypointRequired')
|
56
|
-
}
|
57
|
-
|
58
|
-
if (!builder) {
|
59
|
-
throw new CliArgumentError('builderRequired')
|
60
|
-
}
|
61
|
-
|
62
|
-
try {
|
63
|
-
const stat = Deno.lstatSync(cwd)
|
64
|
-
if (!stat.isDirectory) {
|
65
|
-
throw new CliArgumentError(
|
66
|
-
`Current working directory is required as the first argument - received ${cwd}`
|
67
|
-
)
|
68
|
-
}
|
69
|
-
} catch {
|
70
|
-
throw new CliArgumentError('cwdUnknown', { cwd })
|
71
|
-
}
|
72
|
-
|
73
|
-
if (/\.(jsx?)|(css)\.map$/.test(entrypoint)) {
|
74
|
-
entrypoint = entrypoint.replace(/\.map$/, '')
|
75
|
-
}
|
76
|
-
|
77
|
-
try {
|
78
|
-
const stat = Deno.lstatSync(join(cwd, entrypoint))
|
79
|
-
if (!stat.isFile) {
|
80
|
-
throw new CliArgumentError(
|
81
|
-
`Entrypoint is required as the second argument - received ${entrypoint}`
|
82
|
-
)
|
83
|
-
}
|
84
|
-
} catch {
|
85
|
-
throw new CliArgumentError('entrypointUnknown', { entrypoint })
|
86
|
-
}
|
87
|
-
|
88
|
-
if (!builderNames.includes(builder)) {
|
89
|
-
throw new CliArgumentError('builderUnknown', { builder })
|
90
|
-
}
|
91
|
-
|
92
|
-
return args
|
93
|
-
}
|