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.
Files changed (30) hide show
  1. package/README.md +26 -0
  2. package/addins/build/vbapm.xlam +0 -0
  3. package/lib/{build-project-59d26ffa.js → build-project-eb8454f0.js} +2 -2
  4. package/lib/{build-target-d6327f6f.js → build-target-dbcc69c7.js} +1 -1
  5. package/lib/create-project-3154aace.js +10 -0
  6. package/lib/{export-project-59836888.js → export-project-bc13c1ae.js} +1 -1
  7. package/lib/{export-target-902b2548.js → export-target-5d28d188.js} +2 -2
  8. package/lib/{get-target-cf4af796.js → get-target-e760a439.js} +1 -1
  9. package/lib/{index-4386ff9f.js → index-ddd39b65.js} +1 -1
  10. package/lib/index.js +1 -1
  11. package/lib/init-project-ceecd718.js +15 -0
  12. package/lib/{installer-2f42d28c.js → installer-dbc2c34a.js} +1 -1
  13. package/lib/{load-from-project-6be3cab9.js → load-from-project-acf7400a.js} +1 -1
  14. package/lib/{project-d784a14d.js → project-43370ed3.js} +3 -3
  15. package/lib/{run-macro-c5a7bb2d.js → run-macro-4f1375ca.js} +1 -1
  16. package/lib/{sat-solver-01db5ebc.js → sat-solver-f9155891.js} +1 -1
  17. package/lib/test-project-669dfcfb.js +1 -0
  18. package/lib/{vbapm-build-8e2c88c7.js → vbapm-build-8ff58485.js} +1 -1
  19. package/lib/{vbapm-export-af350c94.js → vbapm-export-96798f4f.js} +1 -1
  20. package/lib/{vbapm-init-131ea380.js → vbapm-init-5c8eb026.js} +1 -1
  21. package/lib/{vbapm-new-e3409051.js → vbapm-new-cd174cbb.js} +2 -2
  22. package/lib/{vbapm-run-795f5167.js → vbapm-run-2f17fb22.js} +1 -1
  23. package/lib/{vbapm-test-dc8aad3b.js → vbapm-test-a7b30592.js} +1 -1
  24. package/lib/{vbapm-version-3b5a838c.js → vbapm-version-c5f3d55a.js} +1 -1
  25. package/lib/vbapm.js +3 -3
  26. package/lib/{workbook-xml-5b96eac5.js → workbook-xml-a61269f4.js} +1 -1
  27. package/package.json +1 -1
  28. package/lib/create-project-0813adf7.js +0 -10
  29. package/lib/init-project-74a9b860.js +0 -15
  30. 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-2f42d28c.js"),r=require("./project-d784a14d.js"),t=require("./build-target-d6327f6f.js");require("assert"),require("./workbook-xml-5b96eac5.js"),require("fs");var i=require("./get-target-cf4af796.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),g=await r.fetchDependencies(n),c=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`
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
- ${c.length?`\nDependencies:\n${c.join("\n")}`:""}`),await t.buildTarget(s,{project:n,dependencies:g,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)};
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-2f42d28c.js"),t=require("./workbook-xml-5b96eac5.js");require("assert");var e=require("./load-from-project-6be3cab9.js"),r=require("path"),i=require("./project-d784a14d.js");const o=a=>/1004/.test(a),n=(t,e)=>a.dedent`
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-2f42d28c.js"),t=require("./workbook-xml-5b96eac5.js"),r=require("./project-d784a14d.js");require("assert"),require("fs");var a=require("./export-target-902b2548.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`
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-2f42d28c.js"),n=require("./project-d784a14d.js"),t=require("path"),r=require("./load-from-project-6be3cab9.js"),o=require("./workbook-xml-5b96eac5.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),m={},p=a.filter(e=>{if(!function(e){return i.includes(t.extname(e))}(e))return!0;const n=d(e);return m[n]=e,!1}),f=await e.parallel(p,async n=>{const o=d(n),a=r.extensionToType[t.extname(n)],s=await e.readFile(n),i=m[o]&&await e.readFile(m[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 d(e){return t.basename(e,t.extname(e))}const m=/vba.*\.bin/i;const p=function(...e){return(n,t,r)=>e.reduce((e,o)=>e?o(n,t,r):e,!0)}(function(e){return!m.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`
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:p,map:f}),i}exports.exportTarget=async function(n,t,i){const{project:d,dependencies:m,blankTarget:p}=t;let f;p||(f=await u(d,n,i));const l=await r.loadFromProject(d,m),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()}(d,h),p||(await e.remove.remove(n.path),await e.copy.copy(f,n.path)),await e.remove.remove(i)},exports.extractTarget=u;
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-2f42d28c.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`
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