vbapm 0.6.12 → 0.6.14
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.
- package/README.md +26 -0
- package/addins/build/vbapm.xlam +0 -0
- package/lib/{build-project-59d26ffa.js → build-project-eb8454f0.js} +2 -2
- package/lib/{build-target-d6327f6f.js → build-target-dbcc69c7.js} +1 -1
- package/lib/create-project-3154aace.js +10 -0
- package/lib/{export-project-59836888.js → export-project-bc13c1ae.js} +1 -1
- package/lib/{export-target-902b2548.js → export-target-5d28d188.js} +2 -2
- package/lib/{get-target-cf4af796.js → get-target-e760a439.js} +1 -1
- package/lib/{index-4386ff9f.js → index-ddd39b65.js} +1 -1
- package/lib/index.js +1 -1
- package/lib/init-project-ceecd718.js +15 -0
- package/lib/{installer-2f42d28c.js → installer-dbc2c34a.js} +1 -1
- package/lib/{load-from-project-6be3cab9.js → load-from-project-acf7400a.js} +1 -1
- package/lib/{project-d784a14d.js → project-43370ed3.js} +3 -3
- package/lib/{run-macro-c5a7bb2d.js → run-macro-4f1375ca.js} +1 -1
- package/lib/{sat-solver-01db5ebc.js → sat-solver-f9155891.js} +1 -1
- package/lib/test-project-669dfcfb.js +1 -0
- package/lib/{vbapm-build-8e2c88c7.js → vbapm-build-8ff58485.js} +1 -1
- package/lib/{vbapm-export-af350c94.js → vbapm-export-96798f4f.js} +1 -1
- package/lib/{vbapm-init-131ea380.js → vbapm-init-5c8eb026.js} +1 -1
- package/lib/{vbapm-new-e3409051.js → vbapm-new-cd174cbb.js} +2 -2
- package/lib/{vbapm-run-795f5167.js → vbapm-run-2f17fb22.js} +1 -1
- package/lib/{vbapm-test-dc8aad3b.js → vbapm-test-a7b30592.js} +1 -1
- package/lib/{vbapm-version-3b5a838c.js → vbapm-version-c5f3d55a.js} +1 -1
- package/lib/vbapm.js +3 -3
- package/lib/{workbook-xml-5b96eac5.js → workbook-xml-a61269f4.js} +1 -1
- package/package.json +1 -1
- package/lib/create-project-0813adf7.js +0 -10
- package/lib/init-project-74a9b860.js +0 -15
- package/lib/test-project-b0a5536b.js +0 -1
package/README.md
CHANGED
|
@@ -184,19 +184,26 @@ Howdy Tim!
|
|
|
184
184
|
|
|
185
185
|
## Manifest (vbaproject.toml)
|
|
186
186
|
|
|
187
|
+
The vbapm manifest (vbaproject.toml) serves as the foundation for your project and provides information on your package, source, dependencies, references, and targets, as detailed below.
|
|
188
|
+
|
|
187
189
|
### [project] or [package]
|
|
188
190
|
|
|
191
|
+
The `[package]` / `[project]` section includes general information about your package. You should choose `[package]` if your project is only intended to be used as a utility inside another project and `[project]` if your project is a standalone tool.
|
|
192
|
+
|
|
193
|
+
Here are the main properties:
|
|
189
194
|
- `name` (_required_)
|
|
190
195
|
- `version` (_required_ for `[package]`)
|
|
191
196
|
- `authors` (_required_ for `[package]`)
|
|
192
197
|
- `target` (_required_ for `[project]`)
|
|
193
198
|
|
|
199
|
+
**Example 1**
|
|
194
200
|
```toml
|
|
195
201
|
[project]
|
|
196
202
|
name = "awesome-excel-project"
|
|
197
203
|
target = "xlsm"
|
|
198
204
|
```
|
|
199
205
|
|
|
206
|
+
**Example 2**
|
|
200
207
|
```toml
|
|
201
208
|
[package]
|
|
202
209
|
name = "awesome-vba-package"
|
|
@@ -204,8 +211,27 @@ authors = ["Me <me@email.com>"]
|
|
|
204
211
|
version = "0.1.0"
|
|
205
212
|
```
|
|
206
213
|
|
|
214
|
+
#### [version]
|
|
215
|
+
vbapm follows [Semantic Versioning](https://semver.org/). Make sure you adopt a compatible versioning approach if you intend to publish to the repository.
|
|
216
|
+
|
|
217
|
+
#### [target]
|
|
218
|
+
`target` is used to define what application/extension to use when building your project. It can be a string for the extension, in which case `target/` includes the source files for creating the target. Otherwise, `type` and `path` can be used to define a custom target path.
|
|
219
|
+
|
|
220
|
+
Example 1:
|
|
221
|
+
```toml
|
|
222
|
+
target = "xlsm"
|
|
223
|
+
# equivalent to target = { type = "xlsm", path = "target" }
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
Example 2:
|
|
227
|
+
```toml
|
|
228
|
+
target = { type = "xlam", path = "targets/xlam" }
|
|
229
|
+
```
|
|
230
|
+
|
|
207
231
|
### [src]
|
|
208
232
|
|
|
233
|
+
Will contain the list of source code files to be included in the VBA-Enabled Document at build time.
|
|
234
|
+
|
|
209
235
|
`name = "path"` or
|
|
210
236
|
|
|
211
237
|
- `path`
|
|
Binary file
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
"use strict";var e=require("./installer-
|
|
1
|
+
"use strict";var e=require("./installer-dbc2c34a.js"),r=require("./project-43370ed3.js"),t=require("./build-target-dbcc69c7.js");require("assert"),require("./workbook-xml-a61269f4.js"),require("fs");var i=require("./get-target-e760a439.js");exports.buildProject=async function(a={}){e.env.reporter.log(e.Message.BuildProjectLoading,"[1/3] Loading project...");const n=await r.loadProject(),{target:s,blankTarget:o}=i.getTarget(n,a.target),c=await r.fetchDependencies(n),g=n.packages.map(e=>{const t=r.toDependency(e);return r.isRegistryDependency(t)?`${e.id} registry+${t.registry}`:`${e.id} ${e.source}`});e.env.reporter.log(e.Message.BuildTargetBuilding,e.dedent`
|
|
2
2
|
\n[2/3] Building target "${s.type}" for "${n.manifest.name}"...
|
|
3
|
-
${
|
|
3
|
+
${g.length?`\nDependencies:\n${g.join("\n")}`:""}`),await t.buildTarget(s,{project:n,dependencies:c,blankTarget:o},a);const d=!n.hasDirtyLockfile;return e.env.reporter.log(e.Message.BuildLockfileWriting,"\n[3/3] Writing lockfile..."+(d?" (skipped, no changes)":"")),d||await r.writeLockfile(n.paths.root,n),e.join(n.paths.dir,"build",s.filename)};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";var a=require("./installer-
|
|
1
|
+
"use strict";var a=require("./installer-dbc2c34a.js"),t=require("./workbook-xml-a61269f4.js");require("assert");var e=require("./load-from-project-acf7400a.js"),r=require("path"),i=require("./project-43370ed3.js");const o=a=>/1004/.test(a),n=(t,e)=>a.dedent`
|
|
2
2
|
Failed to build target "${t.name}", it is currently open.
|
|
3
3
|
|
|
4
4
|
Please close "${e}" and try again.
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";var e=require("./installer-dbc2c34a.js"),r=require("./init-project-ceecd718.js");exports.createProject=async function(i){if(!i||!i.name)throw new e.CliError(e.ErrorCode.NewNameRequired,e.dedent`
|
|
2
|
+
"name" is required with vbapm new (e.g. vbapm new project-name).
|
|
3
|
+
|
|
4
|
+
Try "vbapm help new" for more information.
|
|
5
|
+
`);let{name:t,target:o,from:a,pkg:n,git:s}=i;if(!o&&!a&&t.includes(".")){const e=t.split(".");o=e.pop(),t=e.join(".")}if(!n&&!o&&!a)throw new e.CliError(e.ErrorCode.NewTargetRequired,e.dedent`
|
|
6
|
+
.TYPE, --target, or --from is required for vbapm projects.
|
|
7
|
+
(e.g. vbapm new project.name.TYPE)
|
|
8
|
+
|
|
9
|
+
Try "vbapm help new" for more information.
|
|
10
|
+
`);const m=e.join(e.env.cwd,t);if(await e.pathExists_1.pathExists(m))throw new e.CliError(e.ErrorCode.NewDirExists,`A directory for "${t}" already exists: "${m}". `);await e.mkdirs_1.ensureDir(m),await r.initProject({name:t,dir:m,target:o,from:a,pkg:n,git:s})};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";var e=require("./installer-
|
|
1
|
+
"use strict";var e=require("./installer-dbc2c34a.js"),t=require("./workbook-xml-a61269f4.js"),r=require("./project-43370ed3.js");require("assert"),require("fs");var a=require("./export-target-5d28d188.js");exports.exportProject=async function(o={}){e.env.reporter.log(e.Message.ExportProjectLoading,"[1/3] Loading project...");const i=await r.loadProject();if(!o.target&&!i.manifest.target)throw new e.CliError(e.ErrorCode.ExportNoTarget,e.dedent`
|
|
2
2
|
No default target found for project,
|
|
3
3
|
use --target TYPE to export from a specific target.
|
|
4
4
|
`);let n,s=!1;if(i.manifest.target)o.target&&o.target!==i.manifest.target.type||(n=i.manifest.target);else{const t=o.target,r=i.manifest.name;n={type:t,name:r,path:`targets/${t}`,filename:`${e.sanitize(r)}.${t}`},s=!0}if(!n)throw new e.CliError(e.ErrorCode.ExportNoMatching,`No matching target found for type "${o.target}" in project.`);const p=await r.fetchDependencies(i);let g;try{o.completed?g=o.completed:(g=e.join(i.paths.staging,"export"),e.env.reporter.log(e.Message.ExportToStaging,`\n[2/3] Exporting src from "${n.filename}"`),await e.mkdirs_1.ensureDir(g),await e.empty.emptyDir(g),await t.exportTo(i,n,g,o)),e.env.reporter.log(e.Message.ExportToProject,"\n[3/3] Updating project"),await a.exportTarget(n,{project:i,dependencies:p,blankTarget:s},g)}catch(e){throw e}finally{g&&await e.remove.remove(g)}};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";var e=require("./installer-
|
|
1
|
+
"use strict";var e=require("./installer-dbc2c34a.js"),n=require("./project-43370ed3.js"),t=require("path"),r=require("./load-from-project-acf7400a.js"),o=require("./workbook-xml-a61269f4.js");async function a(t,r){for(const n of r.components.added){const r={name:n.name,path:e.join(t.paths.dir,`src/${n.filename}`)};t.manifest.src.push(r)}for(const e of r.components.removed){const n=t.manifest.src.findIndex(n=>n.name===e.name);t.manifest.src.splice(n,1)}for(let e of r.references.added)t.manifest.references.push(e);for(const e of r.references.removed){const n=t.manifest.references.findIndex(n=>n.name===e.name);t.manifest.references.splice(n,1)}await n.writeManifest(t.manifest,t.paths.dir)}async function s(n,r){const o=t.dirname(n);if(await e.mkdirs_1.ensureDir(o),await e.writeFile(n,r.code),r.binaryPath){if(!r.details.binary)throw new Error(`Binary data missing for component "${r.name}"`);await e.writeFile(e.join(o,r.binaryPath),r.details.binary)}}require("assert");const i=[".frx"];async function c(n){const a=o.dist(n,{directories:!1}).filter(e=>"project.json"!==e&&!e.startsWith("target")&&!e.startsWith("staged")&&!(e=>!(""!==t.extname(e)))(e)).map(t=>e.join(n,t)),{name:s,references:c}=await async function(n){const t=e.join(n,"project.json");if(!await e.pathExists_1.pathExists(t))return{name:"VBAProject",references:[]};const r=await e.jsonfile.readJson(t);return r}(n),p={},d=a.filter(e=>{if(!function(e){return i.includes(t.extname(e))}(e))return!0;const n=m(e);return p[n]=e,!1}),f=await e.parallel(d,async n=>{const o=m(n),a=r.extensionToType[t.extname(n)],s=await e.readFile(n),i=p[o]&&await e.readFile(p[o]);if(!a)throw new e.CliError(e.ErrorCode.ComponentUnrecognized,`Unrecognized component extension "${t.extname(n)}" (at "${n}").`);return new r.Component(a,s,{binary:i})},{progress:e.env.reporter.progress("Loading exported components")});return f.sort(r.byComponentName),{name:s,components:f,references:c,fromDependencies:{components:new Map,references:new Map}}}function m(e){return t.basename(e,t.extname(e))}const p=/vba.*\.bin/i;const d=function(...e){return(n,t,r)=>e.reduce((e,o)=>e?o(n,t,r):e,!0)}(function(e){return!p.test(e.path)}),f=function(...e){return(n,t,r)=>e.reduce((e,n)=>n(e,t,r),n)}(o.transformCoreXml,o.transformWorkbookXml);async function u(r,o,a){let s=e.join(r.paths.build,o.filename);const i=e.join(a,"target");if(!await e.pathExists_1.pathExists(s))throw new e.CliError(e.ErrorCode.ExportTargetNotFound,e.dedent`
|
|
2
2
|
Could not find built target for type "${o.type}"
|
|
3
3
|
(checked "${s}").
|
|
4
|
-
`);if(!e.env.isWindows){const n=e.join(a,"staged",o.filename);await e.pathExists_1.pathExists(n)||(await e.mkdirs_1.ensureDir(t.dirname(n)),await e.copy.copy(s,n)),s=n}return await e.mkdirs_1.ensureDir(i),await n.unzip(s,i,{filter:
|
|
4
|
+
`);if(!e.env.isWindows){const n=e.join(a,"staged",o.filename);await e.pathExists_1.pathExists(n)||(await e.mkdirs_1.ensureDir(t.dirname(n)),await e.copy.copy(s,n)),s=n}return await e.mkdirs_1.ensureDir(i),await n.unzip(s,i,{filter:d,map:f}),i}exports.exportTarget=async function(n,t,i){const{project:m,dependencies:p,blankTarget:d}=t;let f;d||(f=await u(m,n,i));const l=await r.loadFromProject(m,p),w=await c(i),h=function(e,n){const t={components:{added:[],changed:[],removed:[]},references:{added:[],changed:[],removed:[]}},o={components:new Map,references:new Map};for(const n of e.components)o.components.set(n.name,n);for(const n of e.references)o.references.set(n.name,n);for(const r of n.components){const n=r.name,a=o.components.get(n);o.components.delete(n),a&&e.fromDependencies.components.has(a)||(a?r.code!==a.code&&(r.details.path=a.details.path,t.components.changed.push(r)):t.components.added.push(r))}for(const e of o.components.values())t.components.removed.push(e);t.components.added.sort(r.byComponentName),t.components.changed.sort(r.byComponentName),t.components.removed.sort(r.byComponentName);for(const r of n.references){const n=r.name,a=o.references.get(n);o.references.delete(n),a&&e.fromDependencies.references.has(a)||(a?r.guid===a.guid&&r.major===a.major&&r.minor===a.minor||t.references.changed.push(r):t.references.added.push(r))}for(const e of o.references.values())t.references.removed.push(e);return t}(l,await o.toSrc(w));await async function(n,t){const r=e.env.reporter.progress("Updating src files"),o=r.start,i=r.done;r.start=()=>{},r.done=()=>{},o(),await e.parallel(t.components.changed,e=>s(e.details.path,e),{progress:r}),await e.parallel(t.components.added,async t=>{const r=e.join(n.paths.dir,"src",t.filename);t.details.path=r,await s(r,t)},{progress:r}),await e.parallel(t.components.removed,async n=>{await e.remove.remove(n.details.path)},{progress:r}),await a(n,t),i()}(m,h),d||(await e.remove.remove(n.path),await e.copy.copy(f,n.path)),await e.remove.remove(i)},exports.extractTarget=u;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";var t=require("./installer-
|
|
1
|
+
"use strict";var t=require("./installer-dbc2c34a.js");exports.getTarget=function(e,r){let a,o=!1;if(r){if(e.manifest.target)e.manifest.target.type===r&&(a=e.manifest.target);else{const n=r,i=e.manifest.name;a={type:n,name:i,path:"target",filename:`${t.sanitize(i)}.${n}`},o=!0}if(!a)throw new t.CliError(t.ErrorCode.TargetNoMatching,`No matching target found for type "${r}" in project.`)}else e.manifest.target&&(a=e.manifest.target);if(!a)throw new t.CliError(t.ErrorCode.TargetNoDefault,t.dedent`
|
|
2
2
|
No default target found for project.
|
|
3
3
|
|
|
4
4
|
Use --target TYPE for a blank target
|