proscenium 0.1.0.alpha2-x86_64-linux → 0.1.0.alpha3-x86_64-linux
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|
-
}
|